1、数据库概述
数据库:Database简称DB。是按照一定的结构来组织、存储和管理数据的仓库。通常分为关系型数据库和非关系型数据库。
MySQL属于关系型数据库,以表、行、列的结构来组织和处理数据。
表:命名的存储空间;列:一组命名的属性,也称字段;行:一条记录。
每个表由一组列来定义其结构,行则是表中的一条数据。行和列的交集称为数据项,指出了某列在某行上的值,也称为字段值。
2、结构化查询语言SQL
SQL语言可分为五种:DDL数据定义语言;DML数据操作语言;DQL数据查询语言;DCL数据控制语言;TCL事务处理语言。
书写规范:
- 可多行书写,必须分号结尾。
- 适当缩进、空格提高可读性。
- 不区分大小写。
- 关键字不可缩写、分开、跨行书写。
3、DQL简单查询
查询表中的所有列或者指定列,通过算术运算符、列别名以及消除重复行可以改变查询结果的显示方式。
3.1 语法
查询表中所有列:
SELECT *
FROM dept;
或者
SELECT deptno,dname,loc
FROM dept;
查询指定列:
SELECT deptno,loc
FROM dept;
算术运算符优先级:
- 乘除优先于加减
- 相同优先级从左往右进行
- 括号提高优先级
空值理解:
空值用NULL表示,表示一种无效的、未知的值,空值不同于零或者空格。参与运算后结果为空值。
列别名:
- 直接在列名/表达式后起别名
- 列名与别名中间加as
当别名中含有空格或者特殊字符时,别名两侧需加双引号。
消除重复行:
使用DISTINCT关键字,消除查询结果中完全相同的行。
4、DQL条件查询
查询某些特定条件得到行记录。分为单条件和多条件。
4.1单条件查询语法
WHERE语句:
- 必须紧跟在FROM子句后;
- 格式:列名 比较运算符 比较值
特殊比较运算符:
BETWEEN...AND... :查询值在某个范围中;
IN :查询值是否与给定集合内的任意一值相等;
LIKE :查询值是否满足部分匹配(%:匹配零个或者任意个字符;_:匹配一个字符);
IS NULL :查询值是否为NULL。
4.2多条件查询语法
逻辑运算符:(不同逻辑之间需要用"AND"做连接)
- AND :逻辑与;
- OR :逻辑或;
- NOT :逻辑非。
运算符优先级:
- 算术运算符;
- 比较运算符;
- 特殊运算符;
- 逻辑非;
- 逻辑与;
- 逻辑或。
5、DQL查询结果排序
ORDER BY子句:对结果集按照一定的顺序进行显示。可以按照列名、列别名、列序号排序
5.1结果排序语法
ORDER BY 子句:(多属性排序时,越靠前优先级越高)
ORDER BY 属性 ASC,属性 EDSC;
- ASC(默认值):升序;DESC:降序。
- 可同时按照多个列名进行排序。
- 必须写在SELECT语句最后。
- 空值在升序排列中排在最前面,在降序排列中排在最后。
6、DQL多表查询
通过多个表之间的连接条件,使表之间发生发生关联,进而从多个表之间获取数据。
连接方法
- WHERE子句书写同属性相等连接条件(等值连接);
- 将多个表相乘成为一个新的“大表”(笛卡尔积);
- WHER子句结合运算符书写不等的连接条件(非等值连接);
- 通过不同属性信息之间的关系,建立连接(自连接);
- 以左(右)表为基础加入关联表内容(外部链接);LEFT OUTER JOIN 表名 ON 连接条件
- 关联属性的相同属性值的行留下,其余删除(内连接);INNER JOIN 关联属性
注:外部关联表不要在FROM子句中与笛卡尔积混淆;左连接的左表为FROM子句中的表,右表为用来连接的表。
练题
##显示员工SMITH的姓名,部门名称,直接上级名称
SELECT e.ename,d.dname,m.ename
FROM emp e,emp m,dept d
WHERE e.deptno=d.deptno
AND e.mgr=m.empno
AND e.ename='SMITH';
##显示员工姓名,部门名称,工资,工资级别,要求工资级别大于4级。
SELECT e.ename,d.dname,s.grade
FROM emp e,dept d,salgrade s
WHERE e.deptno=d.deptno
AND e.sal BETWEEN s.losal AND s.hisal
AND s.grade>3;
##显示员工KING和FORD管理的员工姓名及其经理姓名
SELECT e.ename 员工姓名,m.ename 经理姓名
FROM emp e,emp m
WHERE e.mgr=m.empno
AND m.ename='KING' OR m.ename='FORD';
##显示员工姓名,参加工作时间,经理名,参加工作时间,要求参加时间比经理早
SELECT e.ename,e.hiredate,m.ename
FROM emp e,emp m
WHERE e.mgr=m.empno
AND e.hiredate<m.hiredate;
7、DQL分组函数
分组函数也叫聚合函数,将多个数据看成一个集体,只能表现出来集体的属性值。
7.1分组函数语法
规则
- 写在SELECT子句中
- WHERE、ORDER BY子句可省略不写
分组函数
- MAX 求最大值
- MIN 求最小值
- SUM 求和
- AVG 求平均值
- COUNT 求个数
注:用法均为MAX( [ DISTINCT | ALL ] 列名 | 表达式 );除COUNT(*)不忽略掉空值外,其余函数都是忽略掉空值再进行运算(包括COUNT(属性))
空值处理
IFNULL(列名,值):表示如果指定行某列的值是NULL,则当做指定的值参与运算。
SELECT AVG(IFNULL(comm,0)) , COUNT(IFNULL(comm,0))
FROM emp;