一、单表查询 SELECT

1、基本语法

  1. -- table_name 表中查询 column_name1,column_name2
  2. SELECT column_name1,column_name2,... FROM table_name;
  3. -- table_name 表中查询 所有
  4. SELECT * FROMtable_name;

2、DISTINCT 过滤结果

  1. -- DISTINCT 关键词用于返回 唯一不同的值,去除 column_name列中的重复值
  2. SELECT DISTINCT column_name FROM table_name;

3、WHERE子句

  1. -- AND/OR 用于连接多个条件
  2. SELECT column_name FROM table_name WHERE codition1 AND/OR codition2 AND/OR ...;
  • codition 条件子句 | 条件子句运算符 | 描述 | | —- | —- | | =, <>, !=, >, >=, <, <= | 等于,不等于,不等于,大于,大于等于,… | | (NOT) BETWEEN…AND… | (不)在某个范围之内 | | LIKE | 模糊查询 | | 常用的通配符 | %表示一个或多个字符,_表示一个字符
    %M_ :表示查询以M在倒数第二位的所有内容

    REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式 | | (NOT) IN | (不)指定针对某个列的多个可能值 | | IS NULL | 空值判断 | | NOT | 非 满足不包含该条件的值 | | 逻辑运算的优先级: | () > not > and > or |

WHERE 子句并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。当 0 时转化为 false,1 转化为 true。

4、ORDER BY、LIMIT、OFFSET

  1. SELECT column_name, column_name...
  2. FROM table_name
  3. WHERE codition1 AND/OR codition2 AND/OR ...
  4. ORDER BY column_name1,column_name2 ASC|DESC
  5. LIMIT num_list OFFSET num_offset;

ASC|DESC 升序|降序

  • ORDER BY 排列时,不写明ASC DESC的时候,默认是ASC
  • ORDER BY 多列的时候,desc/asc 只对它紧跟着的第一个列名有效,其他不受影响
  • ORDER BY 多列的时候,先按照第一个column name1排序,再按照第二个column name2排序

LIMIT 和 OFFSET 子句通常和 ORDER BY 语句一起使用,当我们对整个结果集排序之后,我们可以使用 LIMIT来指定只返回多少行结果,用 OFFSET来指定从哪一行开始返回。你可以想象一下从一条长绳子剪下一小段的过程,我们通过 OFFSET 指定从哪里开始剪,用 LIMIT指定剪下多少长度。

注意:并非所有的数据库系统都支持SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。

二、单表插入 INSERT INTO

1、INSERT INTO 语句可以有两种编写形式

  1. -- 第一种形式:无需指定要插入数据的列名,只需提供被插入的值即可(需要插入行的每一列数据):
  2. INSERT INTO table_name VALUES (value1,value2,value3,...);
  3. -- 第二种形式:需要指定列名及被插入的值:
  4. INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);

2、insert into select 和select into from 的区别(多表)

  1. Insert into scorebak select * from socre where neza='neza'
  2. --插入一行,要求表scorebak 必须存在
  3. Insert into Table2 (field1,field2,...) select value1,value2,... from Table1;
  4. --要求目标表Table2必须存 如果不存在,系统则会提示对象无效。
  5. select * into scorebak from score where neza='neza';
  6. --也是插入一行,要求表scorebak 不存在
  7. SELECT vale1, value2 into Table2 from Table1;
  8. --要求目标表Table2不存在,因为在插入时会自动创建表Table2,好处:将Table1中指定字段数据复制到Table2中。

3、批量导入某表中的某列数据(多表)

  1. INSERT INTO dbo.CusTemp (证件号码) SELECT 证件号码 FROM dbo.CusTemp2;

三、单表更新 UPDATE

  1. -- 执行没有 WHERE 子句的 UPDATE 要慎重,再慎重
  2. UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value;

四、单表删除 DELETE

  1. -- 删除 table_name 表中,some_column 列中值为some_value 的某行数据
  2. DELETE FROM table_name WHERE some_column=some_value;
  3. -- 不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变,不释放空间
  4. DELETE FROM table_name;
  5. --
  6. DELETE * FROM table_name;

DROP、TRUNCATE、DELETE区别:

  • DROP table_name;

删除table_name表,并释放空间,将table_name删除的一干二净。

  • TRUNCATE table_name;

删除表table_name里的内容,并释放空间,但不删除表的定义,表的结构还在。

  • DELETE:

1)、删除指定数据

2)、删除整个表,仅删除表的所有内容,保留表的定义,不释放空间,可以回滚恢复

执行速度:drop > truncate > delete

五、别名 AS

1、列的 SQL 别名语法

  1. SELECT column_name AS alias_name FROM table_name;
  2. -- 可以通过CONCAT,将多个列合并为一列
  3. SELECT CONCAT(cn1,’,’,cn2,’,’...) AS alias_name FROM table_name;

2、表的 SQL 别名语法

  1. SELECT column_name(s) FROM table_name AS alias_name;

使用场景:

  • 在查询中涉及超过一个表
  • 在查询中使用了函数
  • 列名称很长或者可读性差
  • 需要把两个列或者多个列结合在一起

六、连接 JOIN

INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行

  1. 得到的结果数比较:
  2. inner join <= min(left join, right join)
  3. full join >= max(left join, right join)
  4. inner join < min(left join, right join)时,
  5. full join > max(left join, right join)

1、INNER JOIN(简单JOIN):INNER JOIN 从多个表中返回满足 JOIN 条件的所有行

  1. SELECT column, another_table_column,
  2. FROM table1 (主表)
  3. (INNER) JOIN table2 (要连接的表) -- INNER JOIN JION 相同
  4. ON table1.column_name = table2.column_name (主键连接,两个相同的连成1条)
  5. WHERE condition(s)
  6. ORDER BY column, ASC/DESC
  7. LIMIT num_limit OFFSET num_offset;

2、LEFT/RIGHT/FULL JOIN:外连接

  1. SELECT column, another_column,
  2. FROM mytable
  3. LEFT/RIGHT/FULL (OUTER) JOIN another_table -- 某些数据库中 OUTER
  4. ON mytable.id = another_table.matching_id
  5. WHERE condition(s)
  6. ORDER BY column, ASC/DESC
  7. LIMIT num_limit OFFSET num_offset;

3、NULL处理

  1. SELECT column, another_column,
  2. FROM mytable
  3. WHERE column IS/IS NOT NULL AND/OR another_condition AND/OR…;

4、在使用 join 时,on 和 where 条件的区别如下:

  • on 条件是在生成临时表时使用的条件,它不管 on 中的条件是否为真,都会返回左边表中的记录。
  • where 条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有 left join 的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

七、UNION

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

1、UNION 操作符

  • 合并两个或多个 SELECT 语句的结果
  • UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同
    1. SELECT col1,... FROM table1
    2. UNION (ALL)
    3. SELECT col1,... FROM table2;

    默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL