之前建的一张表已经不能支撑本章的学习了,所以我们要新建两张表。

#创建部门表
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 查看函数使用 mysql查询函数_字段

函数

(一)常用函数

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结束

mysql 查看函数使用 mysql查询函数_字符串_02

IF:这个类似java的三元运算符 SELECT IF(1<2,'yes ',‘no’); 如果第一个值是TRUE返回值为第二个值,否则其返回值为第三个值

IFNULL:IFNULL(expr1,expr2)如果expr1 不为NULL ,则IFNULL() 的返回值为expr1 ; 否则其返回值为expr2

别名的另一种用法是前边加AS(推荐使用,提升代码可读性)

mysql 查看函数使用 mysql查询函数_mysql_03

NULLIF:NULLIF(expr1,expr2) 如果expr1=expr2成立,那么返回值为NULL,否则返回值为expr1

其他函数
Password(str):从原文密码str 计算并返回密码字符串,当参数为NULL 时返回NULL。
Md5(str):为字符串算出一个MD5 128 比特检查和
MySQL的函数很多,篇幅有限,随机写了两个例子,想具体学习函数的可以百度学习

(二)分组函数

分组函数常用到以下五个函数:

MIN:返回最小值

MAX:返回最大值

mysql 查看函数使用 mysql查询函数_字符串_04


SUM:返回总和

AVG:返回平均值

mysql 查看函数使用 mysql查询函数_mysql 查看函数使用_05


COUNT:

COUNT函数的主要功能是返回满足条件的每组记录条数

mysql 查看函数使用 mysql查询函数_字段_06


用GROUP BY子句创建数据组

mysql 查看函数使用 mysql查询函数_字段_07


GROUP BY 所指定的列并不是必须出现在SELECT 列表中

mysql 查看函数使用 mysql查询函数_数据库_08


用 HAVING 子句排除组结果

mysql 查看函数使用 mysql查询函数_mysql 查看函数使用_09


HAVING的用法和WHERE很像,但是WHERE是写在GROUP BY之前所以不能作用排除组结果,HAVING要写在GROUP BY之后,而排序ORDER BY永远要写在最后边

子查询

mysql 查看函数使用 mysql查询函数_数据库_10


先运行子查询测试结果

mysql 查看函数使用 mysql查询函数_数据库_11


再执行全部查询

mysql 查看函数使用 mysql查询函数_数据库_12


下篇更新视图与索引