学习目的:了解MySQL结构查询语言的概念,掌握SELECT查询语句的基本语法,掌握SELECT查询语句中过滤条件的使用,掌握过滤条件中比较运算符和逻辑运算符的使用,掌握查询结果的排序等
重点:
- SELECT查询语句的基本语法
难点:
- SELECT查询语句中过滤条件中逻辑运算符的混合使用
- SELECT查询语句中过滤条件中特殊比较运算符的使用
- 排序语法的应用
/*结构化查询语言(Structured Query Language)简称SQL, 是操作和检索关系型数据库的标准语言,
20世纪70年代由IBM公司开发,目前应用于各种关系型数据库。
● 结构化查询语言可分为5类:
○ 数据查询语言(DQL:Data Query Language):语句主要包括SELECT,用于从表中检索数据。
○ 数据操作语言(DML:Data Manipulation Language):语句主要包括INSERT,UPDATE和DELETE,用于添加,修改和删除表中的行数据。
○ 事务处理语言(TPL:Transaction Process Language): 语句主要包括COMMIT和ROLLBACK,用于提交和回滚。
○ 数据控制语言(DCL:Data Control Language):语句主要包括GRANT和REVOKE,用于进行授权和收回权限。
○ 数据定义语言(DDL:Data Definition Language):语句主要包括CREATE、DROP、ALTER,用于定义、销毁、修改数据库对象*/
-- 1.
SELECT * FROM emp; -- 查询所有员工(EMP)信息
SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno; -- 查询所有员工(EMP)信息,比上一种查询方法更快
-- 2. 可以在SELECT语句中使用算术运算符,改变输出结果
SELECT ename,sal,12*(sal+300) FROM emp;
-- 3. 空值 NULL:空值是指一种无效的、未赋值、未知的或不可用的值。 空值不同于零或者空格
-- 4. 列别名:
SELECT ename AS name,sal salary FROM emp; -- AS可写可不写,name为ename的列别名,salary为sal的列别名
/*一下三种情况需要在列别名两侧添加双引号
1.列别名中包含空格
2.列别名中要求区分大小写(orcal中)
列别名中包含特殊字符
*/
SELECT ename AS "Name",sal*12 "Annual Salary" FROM emp;
-- 5.消除重复行: DISTINCT
SELECT DISTINCT deptno FROM emp;
-- 6.显示表结构:DESCRIBE,可简写为DESC
DESC emp;
-- 7.选择限定数据行:WHERE,where后为限定条件
-- 7.1比较数值型数据
SELECT ename,job,sal FROM emp WHERE deptno=10; -- 查询部门号为10的员工的姓名、职业、工资
-- 7.2比较字符型数据,
-- 字符型数据需用单引号括起来,mysql不区分大小写,orcale区分
SELECT ename,job,sal FROM emp WHERE job='CLERK';--
-- 7.3比较日期型数据,
-- 日期行数值作为比较符时必须用单引号
SELECT ename,job,sal FROM emp WHERE hiredate>'1985-01-01';--
-- 7.4 BETWEEN .. AND.. 运算符来判断要比较的值是否在某个范围内
SELECT ename,job,sal FROM emp WHERE sal BETWEEN 1000 AND 1500;
-- 7.5 IN 运算符判断要比较的值是否和集合列表中的任何一个值相等
SELECT ename,job,sal FROM emp WHERE mgr IN (7902,7566,7788);-- 查询经理编号为7902, 7566, 7788的员工姓名,职业,工资
-- 7.6 LIKE运算符判断要比较的值是否满足部分匹配,也叫模糊查询。
-- 模糊查询中两个通配符:%代表任意个任意字符,_代表一个任意字符
SELECT ename,sal FROM emp WHERE ename LIKE '%A%';-- 查询姓名有A的员工的姓名、工资
SELECT ename,sal FROM emp WHERE ename LIKE '_L%'; -- 查询姓名第二个字为L的员工的姓名和工资
-- LIKE通配符转义:ESCAPE,查询JOB以"MAN_"开头的雇员信息
SELECT * FROM emp WHERE job LIKE 'MAN@_%' ESCAPE '@';
-- 7.7IS NULL运算符来判断要比较的值是否为空值NULL
SELECT ename,mgr FROM emp WHERE mgr IS NULL;
-- 7.8 逻辑运算符AND、OR、NOT,逻辑表达式的结果为TRUE,FALSE,NULL
SELECT empno,ename,job,sal FROM emp WHERE job='CLERK' AND sal>=1100;
SELECT empno,ename,job,sal FROM emp WHERE job='CLERK' OR sal>=1100;
SELECT empno,ename,job,sal FROM emp WHERE job NOT IN('CLERK','MANAGER','ANYLIST');
/* 逻辑非NOT运算符还可以和BETWEEN…AND、LIKE、IS NULL一起使用
... WHERE deptno NOT IN (10, 20)
... WHERE sal NOT BETWEEN 3000 AND 5000
... WHERE ename NOT LIKE 'D%’
... WHERE mgr IS NOT NULL
*/
-- 8.排序: ORDER BY,放select语句最后(有limit则在limit前)。
-- null 在mysql中时最小的
-- 8.1 ASC: 升序(默认值), DESC: 降序
SELECT empno,ename,job,sal
FROM emp
ORDER BY hiredate,sal DESC;-- 查询emp表中的 empno,ename,job,sal,按hiredate升序、sal降序排列
-- 8.2按别名排序
SELECT empno,ename,sal*12 annsal
FROM emp
ORDER BY annsal;--
-- 8.3按结果集序列号排序
SELECT ename,deptno,sal
FROM emp
ORDER BY 2,3 DESC;-- 查询emp表中的ename,deptno,sal,按deptno升序、sal降序pailie
-- 9.限制记录行数: LIMIT,放select语句最后
/*语法格式:
SELECT 字段列表
FROM 数据源
LIMIT [start,]length;
说明: 1.limit接受一个或两个整数参数。start表示从第几行记录开始输出,length表示输出的记录行数。
2.表中第一行记录的start值为0(不是 1)*/
-- 9.1 查询前n条记录
SELECT ename, deptno, sal
FROM emp
LIMIT 0,5;-- 查询员工表的前5条记录
-- LIMIT 5; -- 与上一句等价:当start参数为0时可省略不写
-- 9.2 分页查询
/*limit分页公式:curPage是当前第几页;pageSize是一页多少条记录
limit (curPage-1)*pageSize,pageSize*/
LIMIT 10,5;/*分页功能,每页5条记录,显示第三页的记录(3-1)*5+10*/
-- 10小结
/*● 结构化查询语言的作用和分类
● 基本SELECT语句的作用
● 空值NULL
● 列别名
● 消除重复行的关键字Distinct
● 限制数据的作用及 WHERE 子句的语法
● 按列名、列别名、顺序号排序及升序降序排序
● 限制记录行数*/