1.关系型数据库的特点
1、使用表来存储数据,格式统一,便于维护。
2、使用SQL语句操作数据库,标准统一,使用方便。
3、数据存储在磁盘中,相对安全。
2.DBMS、数据库和表的关系?
简言之,先有DBMS,之后有数据库,再有表,每个表中再有数据,具体如下图所示。
3.以下关于连接MySQL数据库方式"mysql -hxxx -Pxxx -uxxx -pxxx"说法错误的是( D )
A. -h表示要连接的主机IP
B. -P表示MySQL数据库端口号
C. -u表示使用哪个用户进行连接
D. -ps表示用户的密码
-p表示用户的密码
4.关于MySQL数据库服务操作,以下说法错误的是( B )
A. 使用MySQL数据库前一定要启动服务,否则将无法使用
B. 启动服务和停止服务只能通过window操作系统中的管理服务进行设置
C. 启动服务可以通过 net start 数据库服务名 命令来进行设置
D.启动服务和停止服务都有两种操作方式
DOS命令也可以启动和停止服务
5.什么是SQL
结构化查询语言(Structured Query Language),后续通常简称SQL。SQL是用于存取数据以及查询、更新和管理关系数据库系统的标准语言。
6.SQL语言分类
分类 | 名称 | 用途 | 代表关键字 |
DDL( Data Definition Language ) | 数据定义语言 | 用来定义数据库、表及其它对象的结构 | CREATE、DROP、ALTER |
DML( Data Manipulation Language ) | 数据操作语言 | 用来增加、修改、删除表中的数据 | INSERT、DELETE、UPDATE |
DQL (Data Query Language) | 数据查询语言 | 用来查询表中的数据 | SELECT、FROM、WHERE、ORDER BY 、GROUP BY、HAVING |
DCL (Data Control Language) | 数据控制语言 | 用来授予和收回权限 | GRANT、REVOKE |
TCL (Transaction Control Language) | 事务处理语言 | 用来对数据进行提交和回滚 | GRANT、REVOKE |
7.DQL
一:简单查询
(1)空值的含义
空值用NULL表示,表示一种无效的、未知的值,空值不是零,也不是空格。
(2)空值的运算
空值参与算术运算,运算后的结果仍为NULL
(3)列别名
1、列别名可以直接写在列名或者表达式的后面,也可以加as关键子,加不加as没有任何区别,通常不加。
2、如果SELECT子句中有计算表达式,通常使用列别名。
(4)消除重复行
关键字:distinct
语法:
SELECT DISTINCT 列名1,列名2,....列名n
FROM table;
二:条件查询
单条件查询
(1)单条件查询语法
语法:
SELECT [ DISTINCT ] * | 列名 | 表达式 [别名] [,...]
FROM 表名
[ WHERE 条件表达式 ] ;
(2)like运算符
使用LIKE运算符可以查询出某列的值是否满足关键字匹配,也叫模糊查询。如查询员工名字中含有字母S的员工,就可以使用LIKE运算符来解决。
% : 百分号,代表匹配零个或任意个字符。
_ : 下划线,代表匹配1个任意字符。
(3)is null 运算符
如果要查询某列的值是否为NULL,使用 “列名 = NULL”是查询不出来的。只能使用 “列名 IS NULL”
多条件查询
多个条件之间需要使用逻辑运算符进行连接。
语法:
SELECT [ DISTINCT ] * | 列名 | 表达式 [别名] [,...]
FROM 表名
[ WHERE 条件表达式1 逻辑运算符 条件表达式2 ] ;
说明:逻辑运算符包含逻辑与 AND,逻辑或 OR,逻辑非 NOT。下表分别介绍3类逻辑运算符的含义。
三:对查询结果排序
1.ORDER BY子句
语法:SELECT [ DISTINCT ] * | 列名 | 表达式 [别名] [,...]
FROM 表名
[WHERE 条件]
[ORDER BY 列名1 | 列别名1 | 列序号1 [ ASC | DESC ], 列名2 | 列别名2 | 列序号2 [ ASC | DESC ];
eg:查询部门在20或30的员工姓名,部门编号,并按照工资升序排序。
select ename,deptno,sal from emp
where deptno in (20,30)
order by sal;
四:多表查询
1.多表连接介绍
可以实现从多个表中查询数据,多表查询内容包括内连接,外连接,笛卡尔积,等值连接,非等值连接等
连接的语法为:
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
说明:如果在多个表中出现相同的列名,则需要使用表名作为来自该表的列名的前缀。
N个表相连时,至少需要N-1个连接条件
2.等值连接
- 自身连接,也叫自连接,是一个表通过某种条件和本身进行连接的一种方式,就如同多个表连接一样。
查询工作地点在NEW YORK的员工编号,姓名,部门编号,工作地点
select emp.empno, emp.ename, emp.deptno, dept.deptno, dept.loc
from emp, dept
where emp.deptno=dept.deptno and loc= ‘NEW YORK’;
3.非等值连接
查询每个员工的姓名,工资,工资等级
select e.ename, e.sal, s.grade
from emp e, salgrade s
where e.sal
between s.losal and s.hisal;
五:ANSI SQL:标准的连接语法
多表查询还有美国国家标准协会(ANSI)的SQL标准语法:1999标准的连接语法。
SELECT table1.column, table2.column
FROM table1
[JOIN table2
ON(table1.column_name = table2.column_name)] |
[LEFT | RIGHT OUTER JOIN table2
ON (table1.column_name = table2.column_name)];
六:外连接
- 在多表连接时,可以使用外部连接来查看没有匹配连接条件的数据行。
- 左外连接以LEFT OUTER JOIN关键字左边的表为基表,该表所有行数据按照连接条件无论是否与右边表能匹配上,都会被显示出来。
- 右外连接以RIGHT OUTER JOIN子句中的右边表为基表,该表所有行数据按照连接条件无论是否与左边表能匹配上,都会被显示出来。
查询所有雇员姓名,部门编号,部门名称,包括没有部门的员工也要显示出来
select e.ename,e.deptno,d.dname
from emp e
left outer join dept d
on (e.deptno = d.deptno);
七:分组函数
分组函数 | 含义 |
MAX | 求最大值 |
MIN | 求最小值 |
SUM | 求和 |
AVG | 求平均值 |
COUNT | 求个数 |
分组函数的语法如下:
SELECT 列名, 分组函数
FROM 表名
WHERE 条件表达式
ORDER BY 列名;
(1)MIN和MAX函数主要是返回每组的最小值和最大值,语法如下:
MIN( [ DISTINCT | ALL ] 列名 | 表达式 )
MAX( [ DISTINCT | ALL ] 列名 | 表达式 )
说明:
1、MIN和MAX可以用于任何数据类型
2、DISTINCT表示去掉组中的重复值,ALL表示不去掉重复值,省略不写默认为ALL
3、既可以写列名,也可以写表达式,通常写列名。
(2)SUM和AVG函数分别返回每组的总和及平均值,语法如下:
SUM( [ DISTINCT | ALL ] 列名 | 表达式 )
AVG( [ DISTINCT | ALL ] 列名 | 表达式 )
说明:
1、SUM和AVG函数只能够对数值类型的列或表达式操作。
2、SUM和AVG函数会忽略掉NULL值后,再进行运算。
(3)COUNT函数用来返回满足条件的每组记录个数,语法如下:
1、COUNT(*):返回满足条件的每组记录个数。
2、COUNT( [ DISTINCT | ALL ] 列名 | 表达式 ):返回满足条件的每组非空记录个数。
说明:5个分组函数,除COUNT(*)不忽略掉空值外,其余函数都是忽略掉空值再进行运算。
(4)过滤分组结果
HAVING子句
思考如下问题:查询部门人数大于3人的部门编号、部门人数。
"部门人数大于3"是一个条件,尝试一下是否可以写在WHERE子句中。
SELECT deptno,count(empno)
FROM emp
WHERE count(empno) >3
GROUP BY deptno;
该SQL执行结束后,出现错误提示"Invalid use of group function",表示组函数应用无效。原因在于WHERE子句在GROUP BY 子句之前执行,所以当WHERE子句执行的时候,尚未进行分组,也就无法在WHERE子句中使用分组函数。
此时,SQL中提供了解决方案
SELECT deptno,count(empno)
FROM emp
GROUP BY deptno
HAVING count(empno) >3;
例:查询每个部门最高工资大于2900的部门编号,最高工资
SELECT deptno, max(sal)
FROM emp
GROUP BY deptno
HAVING max(sal)>2900;
例:查询职位以SALES开头,每种职位的工资和,并且要求工资和大于5000,按照工资和升序排列
SELECT job, SUM(sal)
FROM emp
WHERE job NOT LIKE 'SALES%'
GROUP BY job
HAVING SUM(sal)>5000
ORDER BY SUM(sal);
总结:
1、WHERE子句用来过滤分组之前的记录,不能使用组函数
2、HAVING子句用来过滤分组之后的记录,可以使用组函数
由于内容太多,续下章节~~~
标签:总结,列名,查询,MySQL,deptno,WHERE,连接,SELECT From: https://blog.csdn.net/qq_46019713/article/details/137032686