MySQL安装与配置(入门篇):https://blog.csdn.net/weixin_46214451/article/details/107382609
MySQL基础句法(基础篇 上):https://blog.csdn.net/weixin_46214451/article/details/107400726
之前建的一张表已经不能支撑本章的学习了,所以我们要新建两张表。
#创建部门表
CREATE TABLE DEPT
(
DEPTNO INT(2) AUTO_INCREMENT PRIMARY KEY,
DNAME VARCHAR(20),
LOC VARCHAR(30)
) CHARACTER SET utf8
#创建员工表
CREATE TABLE EMP
(
EMPNO int(4) AUTO_INCREMENT PRIMARY KEY,
ENAME VARCHAR(10),
JOB VARCHAR(20),
MGR INT(4),
HIREDATE DATE,
SAL DOUBLE(7,2),
COMM DOUBLE(7,2),
DEPTNO INT(2)
) CHARACTER SET utf8
插入数据
注意观察我两张表的插入语法有什么不同,当对全部字段插入数据时,使用第二种更简单高效,默认依次匹配所有字段
在这里插入代码片#部门表插入数据
INSERT INTO DEPT (DEPTNO,DNAME,LOC) VALUES
(10,'ACCOUNTING','NEW YORK'),
(20,'RESEARCH','DALLAS'),
(30,'SALES','CHICAGO'),
(40,'OPERATIONS','BOSTON'),
(50,'DEVELOPMENT','DETROIT')
#员工表插入数据
INSERT INTO EMP () VALUES
(7196,'GREEN','SALESMAN',6989,'1988-05-04',2000, NULL,10),
(3356,'MARTIN','SALESMAN',6989,'1997-02-03',1300, NULL, 10),
(3355,'ALLEN','ANALYST',6989,'1966-01-13',2300, NULL, 20),
(7782,'KING','CLERK',9999,'1961-08-12',5000, NULL, 50),
(6989,'TURNER','MANAGER',7782,'1988-04-28',3000, NULL, 40),
(2296,'WARD','MANAGER',7782,'1986-09-16',3000, NULL, 40),
(2288,'AROMANO','ANALYST',7782,'1997-12-28',2800, NULL, 30)
一、多表连接查询
一次查询,可以同时查出多个表的数据
语法为:
SELECT 表1.字段, 表2.字段
FROM 表1, 表2
WHERE 表1.字段 = 表2.字段
在 WHERE子句中书写连接条件
如果在多个表中出现相同的列名,则需要使用表名作为来自该表的列名的前缀
N个表相连时,至少需要N-1个连接条件
表连接有多种方式,但是不太常用,这里例举一个常用的等值连接
同时查询A表的某字段和B表的某字段,从A表和B表中,当A表某字段=B表某字段
例:查询工作地点在NEW YORK的员工编号,姓名,部门编号,工作地点
部门表和员工表都有一个相同的DEPTNO(部门ID)字段,所以可以写成
#查询工作地点在NEW YORK的员工编号,姓名,部门编号,工作地点
SELECT EMP.EMPNO,EMP.ENAME,EMP.DEPTNO,DEPT.LOC
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
函数
(一)常用函数
MySQL的函数有很多,但是不常用,需要用的时候百度去查就可以,主要掌握函数的用法
常用函数分类:
数学函数
FLOOR(x):返回小于或者等于x的最大整数值;
ROUND(x,y):返回保留小数点后面y位,四舍五入的整数;
TRUNCATE(x,y):返回被舍弃的小数点后y位的数字x;
RAND():每次产生不同的随机数;
字符串函数
CHAR_LENGTH(str):返回字符串str的所包含字符个数;
LENGTH(str):返回字符串str的长度;
CONCAT(s1,s2,…): 字符串连接;
CONCAT_WS(x,s1,s2,…):字符串连接, x是其它参数的分隔符;
日期和时间函数
CURDATE()和CURRENT_DATE() :获取当前日期函数;
NOW():返回服务器的当前日期和时间;
CURTIME():返回当前时间,只包含时分秒;
流程控制函数
这个比较重要
CASE :看着复杂,但是要把()里的内容看成一个整体,()后边可以起个别名
WHEN 后接条件,THEN后接返回结果,ELSE兜底。以为CASE开始END结束
IF:这个类似java的三元运算符 SELECT IF(1<2,'yes ',‘no’); 如果第一个值是TRUE返回值为第二个值,否则其返回值为第三个值
IFNULL:IFNULL(expr1,expr2)如果expr1 不为NULL ,则IFNULL() 的返回值为expr1 ; 否则其返回值为expr2
别名的另一种用法是前边加AS(推荐使用,提升代码可读性)
NULLIF:NULLIF(expr1,expr2) 如果expr1=expr2成立,那么返回值为NULL,否则返回值为expr1
其他函数
Password(str):从原文密码str 计算并返回密码字符串,当参数为NULL 时返回NULL。
Md5(str):为字符串算出一个MD5 128 比特检查和
MySQL的函数很多,篇幅有限,随机写了两个例子,想具体学习函数的可以百度学习
(二)分组函数
分组函数常用到以下五个函数:
MIN:返回最小值
MAX:返回最大值
SUM:返回总和
AVG:返回平均值
COUNT:
COUNT函数的主要功能是返回满足条件的每组记录条数
用GROUP BY子句创建数据组
GROUP BY 所指定的列并不是必须出现在SELECT 列表中
用 HAVING 子句排除组结果
HAVING的用法和WHERE很像,但是WHERE是写在GROUP BY之前所以不能作用排除组结果,HAVING要写在GROUP BY之后,而排序ORDER BY永远要写在最后边
子查询
先运行子查询测试结果
再执行全部查询
下篇更新视图与索引