SQL概述
SQL发展
SQL特点
SQL查询基本概念
单表查询
投影查询
1.查询指定列:
SELECT 列名1,列名2,列名3,.....FROM Table_Name; #查询全部列: SELECT * FROM Table_Name; #查询某一张表的全部列
SELECT Table_Name_A.*,列名1,列名2,列名3,.....FROM Table_Name_A,Table_Name_B;
2.消除指定元组:
SELECT DISTINCT 列名 FROM Table_Name;
选择查询
比较运算:>,>=.<,<=,=,<>(或者!=)
范围查询:BETWEEN....AND
SELECT studentNO,courseNO,score from scorewhere score BETWEEN 80 AND 90;
集合查询:IN
SELECT studentNO,courseNO,score from scorewhere courseNo IN('001','002,'005');
空值查询:IS NULL
SELECT * from Student where studentNO IS NULL;
字符匹配查询:LIKE ‘%some char%’,LIKE ‘_some char_’
下划线_代表匹配一个字符:
SELECT * from Student where studentName LIKE ‘%some char%’;
百分号%代表匹配多个字符:
SELECT * from Student where studentName LIKE ‘_some char_’;
ESCAPE '\'表示\为换码字符,这样紧跟在\符号后面的_就不是通配符了,而是普通用户要查询的符号
SELECT * from Student where studentName LIKE ‘_some char\_’ ESCAPE '\';
逻辑查询:AND ,OR ,NOT
SELECT * FROM student where studentName=‘mikey’ AND studentNo=2018;
SELECT * FROM student where studentName=‘mikey’ or studentName=‘LEO' ;
SELECT * FROM student where studentName!=‘mikey’ ;
排序运算
语法:ORDER BY <表达式1>[ASC|DESC],<表达式1>[ASC|DESC],<表达式1>[ASC|DESC].............
ASC:升序(省缺)
DESC:降序
表达式1如果不能判断排序,则推到表达式2
SELECT * FROM STUDENT GROUP BY studentNo;
SELECT * FROM STUDENT GROUP BY studentNo DESC;
查询表
SELECT studentNo,studentName,birthday from(SELECT * from Student Where sex='女') AS a where year(birthday)=1999;
聚合查询
count([DISTINCT|ALL] { *|<列名>});统计关系的元组(记录)个数或者一列中值的个数
sum([DISTINCT|ALL] {<列名>});统计一列中值的总和(此列必须为数值类型)
avg([DISTINCT|ALL] {<列名>});统计一列中值的平均值(此列必须为数值类型)
max([DISTINCT|ALL] {<列名>});统计一列中值的最大值
min([DISTINCT|ALL] {<列名>});统计一列中值的最小值
getdate():获取当前日期时间
year(日期):获取当前日期年份
连接查询
等值与非等值连接
WHERE [表1.]<属性名1><比较运算符>[表2.]<属性名2>
[<逻辑运算符>]
[表3.]<属性名3><比较运算符>[表4.]<属性名4>
比较运算符:>,>=.<,<=,=,<>(或者!=)
WHERE 子句:作用于整个查询对象,对元组过滤
HAVING 子句:仅作用于分组,对分组进行过滤
自表连接
自己对自己连接:
where b.courseNo=123 and b.courseNo=125;
内连接:
只是检索表和表之间符合连接条件的记录
外连接
定义:在实际应用中,往往需要将不满足连接条件的元组也检索出来,只是在相应的位置用空值代替;
左外连接:
检索左表的全部记录及右表符合连接条件的记录
左外连接的连接结果中包含左关系中的所有元组,对于左关系中没有连接上的元组,其右关系中的相应属性用空值代替
右外连接:
检索右表的全部记录及左表符合连接条件的记录(左外连接的逆向)
右外连接的连接结果中包含右关系中的所有元组,对于右关系中没有连接上的元组,其左关系中的相应属性用空值代替
全外连接:
全外连接的连接结果中包含左右关系中的所有元组,对于左关系中没有连接上的元组,其右关系中的相应属性用空值代替,对于右关系中没有连接上的元组,其左关系中的相应属性用空值代
嵌套子查询
使用in的子查询
使用比较运算符的子查询
使用存在量词EXISTS的子查询
复杂子查询实例
集合运算
SQL查询一般格式