SQL的语言分类
SQL功能 | 动词 |
---|---|
DQL ( Data Query Language ) : 数据查询语言 | select |
DDL (Data Define Languge) : 数据定义语言 | create、drop、alter |
DML ( Data Manipulate Language) : 数据操作语言 | insert、update、 delete |
DCL ( Data Control Language ) : 数据控制语言 | gtant、revoke |
数据查询
语句格式:
SELECT [ALL|DISTINCT] <目标列表达式> FROM <表名或视图名>
WHERE <条件表达式>
GROUPBY <列名1> [ HAVING <条件表达式>]
ORDERBY <列名2> [ ASCIDESC ];
单表查询
一、选择表中的若干列
1.查询指定列
SELECT 列名 FROM 表名;
2.查询全部列
SELECT * FROM 表名;
3.查询经过计算的值
SELECT子句的<目标列表达式>可以为:
- 算术表达式
- 字符串常量
- 函数
- 列别名
4.选择列
(1)常量
(2) 表达式
select sname , 2020 - sage from student ;
(3) 函数
select sno ,year(getdate( ))-sage from student;
(4) 列别名
select sno ,year(getdate( ))-sage (AS)出生年份 from student ;
如果别名包含SQL关键字或特殊符号,需带双引号""
二、选择表中的若干元组
1.消除取值重复的行
- DISTINCT
- ALL(默认)
2.查询满足条件的元组
常用查询条件
查询条件 | 谓词 |
---|---|
比较 | = > < >= <= (!= ) <> !> !< |
去冗余 | DISTINCT |
确定范围 | BETWEEN AND,NOT BETWEEN AND |
确定集合 | IN,NOT IN |
字符匹配 | LIKE,NOT LIKE |
空值 | IS NULL, IS NOT NULL |
多重条件 | AND, OR , NOT |
3.mysql中的+号:
只有一个功能:运算符
- select 100+90; 两个操作数都为数值型,则做加法运算
- select ‘123’+90; 只要其中一方为字符型,试图将字符型数值转换成数值型,如果转换成功,则继续做加法运算
- select ‘john’+90; 如果转换失败,则将字符型数值转换成0
- select nul1+10; 只要其中一方为null,则结果肯定为null
mysql中的连接 - SELECT CONCAT (‘a’, ‘b’, ‘c’) AS 结果;
- SELECT CONCAT (last_ name, first_ name) AS 姓名 FROM employees;
若连接时有一项为null值
SELECT IFNULL (为null的字段名 , 若为null则显示的值) FROM 表名; - eg:SELECT IFNULL (commission_ pct , 0) AS 奖金率, comnission pct
FROM employees;
4.字符匹配
like
特点:
①一般和通配符搭配使用
通配符:
- % : 任意多个字符,包含0个字符
- _ :任意单个字符
(1)匹配串为固定字符串
查询学号为200215121的学生的详细情况
SEL ECT * FROM Student
WHERE Sno LIKE ‘200215121’;
等价于:
SELECT * FROM Student
WHERE Sno= ’ 200215121’;
(2)匹配串为含通配符的字符串
查询所有姓刘学生的姓名、 学号和性别
SELECT Sname,Sno ,Ssex FROM Student
WHERE Sname LIKE‘刘%’ ;
查询姓"欧阳"且全名为三个汉字的学生的姓名
SELECT Sname FROM Student
WHERE Sname LIKE '欧阳_ ’ ;
查询所有不姓刘的学生姓名
SELECT Sname,Sno,Ssex FROM Student
WHERE Sname NOT LIKE ‘刘%’ ;
(3)使用换码字符将通配符转义为普通字符
查询DB_ Design 课程的课程号和学分
SELECT Cno, Ccredit FROM Course
WHERE Cname LIKE ‘DB \ _ Design’ ESCAPE ’ \ ';
查询以"DB_ " 开头,且倒数第3个字符为i 的课程的详细情况
SELECT * FROM Course
WHERE Cname LIKE ‘DB \ _ %i__’ ESCAPE’ \ ';
ESCAPE’ \ ’ 表示 \ 为换码字符
’ ’ 中的符号可以为任意符号
eg:ESCAPE’ ¥ ’ 表示 ¥ 为换码字符
(4) 涉及空值的查询
IS NULL 或 IS NOT NULL
“IS"不能用”="代替
IS NULL: 仅仅可以判断NULL值,可读性较高,建议使用
<=> NULL : 既可以判断NULL值,又可以判断普通的数值,可读性较低
(5) 多重条件查询
- AND和OR来联结多个查询条件
AND的优先级高于OR,可以用括号改变优先级 - 可用来实现多种其他谓词
[NOT] IN
[NOT] BETWEEN AND
三、组函数 ( 组函数的返回值只有一个 )
关键字 | 功能 |
---|---|
COUNT() | 计算所选数据(记录)的个数 |
SUM() | 计算某一数值列的和 |
AVG() | 计算某一数值列的平均值 |
MAX() | 求(字符、 日期、数值列)的最大值 |
MIN() | 求(字符、 日期、数值列)的最小值 |
四、GROUP BY子句
- 将查询结果表按某一列或多列值分组,值相等的为一-组;
- 未对查询分组,组函数作用于整个查询结果
- 对查询分组后,组函数作用于每个组
- 包含GROUP BY子句的查询语句中,SELECT子句后面的所
有字段列表(除组函数外),均应该包含在GROUP BY子句中
HAVING与WHERE区别
作用对象不同
- WHERE子句作用于基表或视图,从中选择满足条件的元组
- HAVING短语作用于组,从中选择满足条件的组
五、ORDER BY 子句
升序: ASC(默认)
降序: DESC
缺省值为升序.
当排序列含空值时
- DESC : 含有空值的行位于最前面
- ASC : 含有空值的行位于最后面