sql笔记

安稳与你 提交于 2020-03-28 22:05:29

Sql学习笔记

http://www.runoob.com/sql/sql-syntax.html

 

(1)、 使用单引号环绕文本值(大部分数据库也接受双引号)

              若果是数值则不需要引号。

(2)、

      

数据库样表

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
+----+--------------+---------------------------+-------+---------+

 

1、 sql 中不用区分大小写

2、一些最重要的 SQL 命令
select- 从数据库中提取数据
update - 更新数据库中的数据
delete - 从数据库中删除数据
insert into - 向数据库中插入新数据
create database - 创建新数据库
alter database  - 修改数据库
create table - 创建新表
alter table - 变更(改变)数据库表
drop table - 删除表
create index - 创建索引(搜索键)
drop index - 删除索引

 

3、         Select语句   

select 列名 from 表

 

a)     SELECT column_name,column_name
FROM table_name;

4、         select distinct 语句

    查询某列中的值,并且去掉重复的

 

    SELECT DISTINCT column_name,column_name FROM table_name;

5、         where

       Select 字段 , 字段 from 表 where 字段 运算符 值

       SELECT * FROM Websites WHERE country='CN';

   

 

特殊:

       1、空值判断    is null

    ·Select  *  from  table_student   where   age   is  null;

    2、在什么之间 between    and    

       Select  *  from  table_student   where  age between 20 and 30;

    3、指定几个满足的值    in

       Select  *  from  table_student   where  age  in (20,25,27);

    4、 模糊查询/通配符      like

       Select  *  from  table_student  where   name  like  ‘张%’

       查询表中姓名以张开始的所有记录

              %     表示后面可有0一个或者多个字符

           下划线表示有且只有一个字符

              例如  ‘张_’ 表示选取名字是两个字且姓张的记录

       %天%   表示名字中包含天字即可, 刘天,刘天一,天一

       Like可以与not连用,选取不符合的,……not like……

    **********

    Where 后面带其他的, 一律0转化为false,其他的都是true

 

6、         and   or

    Select * from table_student where name=’hhaa’ and  age=20;

    结合and  or

       Select * from table_student where age>20 and(name=’haha’or       name=’xiaoxiaoyao’)

 

7、order by      

     asc升序(默认)    desc降序

    用于对结果集进行排序。

    select * from xxy where age>6 order by age desc

         (在xxy表中在年龄大于6的结果集中按照年龄降序排列)

多列排序:

    Order  by   age , salary;

    (先按照age排序,遇到一样的再来比较salary)

8、插入  insert into

       1、普通插入:(按照表的结构插入)

           inert into table_student  values(值1,值2,……)

       2、插入指定数据: (指定有效的列)

           Insert into table_student(name,age,hobby) values(……)

       3、一次插入多条数据

insert into 表名(字段1,字段2,字段3) values(值01,值02,值03),(值11,值12,值13);

 

9、更新   update  tableName

    在没有where时候,更新要慎重

10、删除   

     1、Delete   删除表中的记录

        Delete from  表   where  列  操作符  值

     2、drop    删除表   (包括表和数据删得一干二净)

        drop  表名

     3、 truncate        (删光内容,但是表的定义、结构还在)

         Truncate 表名

11、取前***条数据

       不同数据库语句不同:

    1、Sql server: (top)

           SELECT TOP 50 PERCENT * FROM Websites;

    2、Mysql: (limit)

           SELECT column_name(s)  FROM table_name
           LIMIT 5;

    3、Oracle: (rownum)

           SELECT * FROM Persons
           WHERE ROWNUM <=5;

12、通配符

     常常与模糊查询like连用

   

 

 

MySQL 中使用 REGEXP  NOT REGEXP 运算符 ( RLIKE NOT RLIKE) 来操作正则表达式。

 

 

13、in 操作符  允许在where子句中规定多个有效值。

        Select  *  from  table  where  column_name   in                    (value1,value2,、、、、、)

 

14、 between    and

       规定结果集是介于两者之间的任何值,且包括边界值(部分数据库)。

       Select * from table_student where age between 5 and 20

 

    (2)衍生出  not between

    (3)带有in的between

       选取alexa介于 1 20 之间但 country 不为 USA IND 的所有网站:

           SELECT * FROM Websites
           WHERE (alexa BETWEEN 1 AND 20)
           AND NOT country IN ('USA', 'IND');

15、别名   

       可以为表或列指定别名

       1、列的别名

           Select 列名 as 别名  from 表名 

       2、表的别名

           Select 列名  from  表名  as  别名

    多个设置别名用逗号隔开

      

 

       结果集的列名会以设置的别名显示

      

 

16、连接    join

           用于把两个或多个表的 行 结合起来,基于这些表的共同字段(列)。

       别名与连接查询一起使用。

    (1)inner join

       Student表 :  学号  姓名  年龄 地址

        Score  表 : 学号  课程号   成绩

      

 

左右连接区别:http://www.cnblogs.com/xiaoxiaoyao/p/8668626.html

    (2)LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行

 

       左边所有的记录均与右边的进行匹配,有匹配的返回,没有匹配的将左边返回,右边对应的用null代替,总之以左边为“主体”。

      

 

          

 

    (3)RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行

          

 

          

 

       (当然不存在一个没有姓名的学生参加考试,这里仅供区别二者需要)

    (4)FULL JOIN:只要其中一个表中存在匹配,则返回行

       

 

                 

 

      

 

       总结:

           1、inner join (等同于join)

       匹配是只返回两者能够匹配上的

           2、left join

       匹配时左边所有的都要返回,遇到右边没有对应的用null填充

           3、right join

       同上  但是是,左边用null填充

           4、full join

       综合2和3.左右都返回,那一侧没有就用null填充。

 

17、union

       Union用于合并两个或者多个select语句的结果集   

 

 

 

 

18、select into

 

 

 

19、 insert into  select

    INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。

 

 

 

 

20、创建数据库

    Create database  数据名;

21、创建表

   

 

 

22、约束

    例如   not null 、foreign key 等就可以看做是约束

       直接写在上面创建的 datatype 后面

      

 

 

 

23、select top

    SELECT TOP 子句用于规定要返回的记录的数目。

         SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。

         注释:并非所有的数据库系统都支持 SELECT TOP 子句。

   

 

24、通配符

 

    4中也有通配符

   

 

 

    (1)[abc] : 代表a或b或c

         [a-h] : 代表a到 h

       

 

        

 

25、主键  primary key

       PRIMARY KEY 约束唯一标识数据库表中的每条记录。

                  主键必须包含唯一的值。

                  主键列不能包含 NULL 值。

                  每个表都应该有一个主键,并且每个表只能有一个主键。

 

26、外键  frieign key

       一个表中的 FOREIGN KEY 指向另一个表中的 “PRIMARY KEY”

 

``````

 

 

 

     

27、check约束

       用于限制列中的值的范围

               

 

28、default  约束

       用于向列中插入默认值

    如果在insert的时候没有规定值,那么就是默认值

    格式  : 直接在建表时的类型后面加

    City varchar(255) DEFAULT '武汉'

 

29、create index

       用于在表中创建索引、

 

              (暂不理解)

 

30、alter 语句

       用于在已经存在的表中添加、删除、修改列

··

 

 

例如

       修改  :

     goods表中的price的类型为int(原来是varchar(20))

                  alter  table goods

                  alter column price int 

            删除  :

                  Alter  table  goods

                  Alter column  price

 

31、auto increment

       自动增长

       例如当有新纪录插入表中时候,我们通常希望序号+1,

定义了auto increment后,在插入的时候就不用再定义值了!

      

 

    默认的初始值是1,每次增加1,要想改变初始值

       Alter table 表名  auto_increment=100;

      

 

    Oracle中就是,先定义一个递增的序列

                     

 

32、时间相关的

    http://www.runoob.com/sql/sql-dates.html

 

33、null值

    在数据库中对于可选的列,如果不写数据将会以null存下来,

Null不能与0进行比较。

    使用  is null  或者  is  not  null  来操作。

   

    Select  * from  student  where  address is not  null、

 

33、常用数据类型

    Varchar(n)     字符/字符串。可变长度。最大长度 n。

    Char(n)       字符/字符串。固定长度n。

    Boolean       布尔值   true/false

    Integer         整型

    Date            年月日

    Time              时分秒

Timestamp        年月日时分秒

Number

 

   

34、函数

           1、    AVG() - 返回平均值                      

                                      SELECT AVG(column_name) FROM table_name

           2、    COUNT()            函数返回指定列的值的数目(NULL 不计入):              

                                      SELECT COUNT(column_name) FROM table_name

           3、    FIRST() - 返回第一个记录的值,ORDER BY 语句对记录进行排序。

                                      SELECT FIRST(column_name) FROM table_name

           4、    LAST() - 返回最后一个记录的值

                                      同上

           5、    MAX() - MAX 函数返回一列中的最大值。NULL 值不包括在计算中。

                                      SELECT MAX(column_name) FROM table_name

           6、    MIN() - 返回最小值

                                      同上

           7、    SUM() - 返回总和

              SELECT SUM(OrderPrice) AS OrderTotal FROM Orders

       

      

    8、 Group by ----根据一个或多个列对结果集进行分组,常与sum合用

              

 

   

 

    

   

    9、having

       在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

              还是8中的图

              要求:现在,我们希望查找订单总金额少于 2000 的客户。

 

 

      

    10、Ucase()    lcase()

       将结果转大写   小写

           Select  ucase(name) from student ;

    11、mid( 列名,起始下标,长度)         下标从1开始

       用于从结果街中选取前n个字符

       例如:Select address from student;

           的结果是  wuhan  beijing  guangzhou

       那么  select mid(address,1,3) from student;   (取前3个字符)

              结果是: wuh  bei   gua

    12、len()

       返回文本字段中值的长度

           假设对应数据为 london   new york   beijing

       Select len(city) from person ;

       结果   6   8(空格也算)   7

 

    13、round()

           用于把数值字段舍入指定的小数位数

       Select round(列名,规定小数位数) from  表名;

      

 

    14、now()       SQL server 中用getdate()

           返回当前的日期和时间

                       OrderDate datetime NOT NULL DEFAULT NOW(),

    15、format(字段,规定格式)              格式化

           用于对字段的显示进行格式化

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!