学习目的:了解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 子句的语法
● 按列名、列别名、顺序号排序及升序降序排序
● 限制记录行数*/