Mysql練習(xí)題秽荤,可對(duì)本章學(xué)習(xí)的內(nèi)容進(jìn)行鞏固
一、創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表
dept.sql
部門表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for dept
-- ----------------------------
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`DEPTNO` int(2) NOT NULL,
`DNAME` varchar(14) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`LOC` varchar(13) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`DEPTNO`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of dept
-- ----------------------------
INSERT INTO `dept` VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO `dept` VALUES (20, 'RESEARCH', 'DALLAS');
INSERT INTO `dept` VALUES (30, 'SALES', 'CHICAGO');
INSERT INTO `dept` VALUES (40, 'OPERATIONS', 'BOSTON');
SET FOREIGN_KEY_CHECKS = 1;
emp.sql
員工表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for emp
-- ----------------------------
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`EMPNO` int(4) NOT NULL,
`ENAME` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`JOB` varchar(9) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`MGR` int(4) NULL DEFAULT NULL,
`HIREDATE` date NULL DEFAULT NULL,
`SAL` double(7, 2) NULL DEFAULT NULL,
`COMM` double(7, 2) NULL DEFAULT NULL,
`DEPTNO` int(2) NULL DEFAULT NULL,
PRIMARY KEY (`EMPNO`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of emp
-- ----------------------------
INSERT INTO `emp` VALUES (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800.00, NULL, 20);
INSERT INTO `emp` VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600.00, 300.00, 30);
INSERT INTO `emp` VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250.00, 500.00, 30);
INSERT INTO `emp` VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975.00, NULL, 20);
INSERT INTO `emp` VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250.00, 1400.00, 30);
INSERT INTO `emp` VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850.00, NULL, 30);
INSERT INTO `emp` VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450.00, NULL, 10);
INSERT INTO `emp` VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000.00, NULL, 20);
INSERT INTO `emp` VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000.00, NULL, 10);
INSERT INTO `emp` VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500.00, 0.00, 30);
INSERT INTO `emp` VALUES (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100.00, NULL, 20);
INSERT INTO `emp` VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950.00, NULL, 30);
INSERT INTO `emp` VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000.00, NULL, 20);
INSERT INTO `emp` VALUES (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300.00, NULL, 10);
SET FOREIGN_KEY_CHECKS = 1;
salgrade.sql
等級(jí)劃分表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for salgrade
-- ----------------------------
DROP TABLE IF EXISTS `salgrade`;
CREATE TABLE `salgrade` (
`GRADE` int(11) NULL DEFAULT NULL,
`LOSAL` int(11) NULL DEFAULT NULL,
`HISAL` int(11) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of salgrade
-- ----------------------------
INSERT INTO `salgrade` VALUES (1, 700, 1200);
INSERT INTO `salgrade` VALUES (2, 1201, 1400);
INSERT INTO `salgrade` VALUES (3, 1401, 2000);
INSERT INTO `salgrade` VALUES (4, 2001, 3000);
INSERT INTO `salgrade` VALUES (5, 3001, 9999);
SET FOREIGN_KEY_CHECKS = 1;
二柠横、簡單查詢
語法格式:==select 字段1窃款,字段2,字段3,...... from 表名;==
查詢每個(gè)員工的工資
SELECT ename,sal from emp;
給查詢列起別名
SELECT ename,sal as '工資' from emp;
注意:字符串要使用單引號(hào)括起來牍氛,盡量別使用雙引號(hào)
三晨继、條件查詢
條件查詢需要用到where語句,where語句必須放到from語句后面搬俊。
==語法格式如下==
select
字段,字段...
from
表名
where
條件;
==條件查詢支持以下運(yùn)算符==
運(yùn)算符 | 說明 |
---|---|
= | 等于 |
<>或 != | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
between ... and | 兩個(gè)值之間踱稍,等同于 >= and <= |
is null | 為null |
and | 并且 |
or | 或者 |
in | 包含,相當(dāng)于多個(gè)or(not in 則是不在這個(gè)范圍中) |
not | not 可以取非悠抹,主要用在 is 或 in 中 |
like | like 稱為模糊查詢,支持%或下劃線匹配 |
==查詢工資為5000的員工姓名==
select
ename,sal
from
emp
where
sal = 5000;
==查詢工資小于3000的員工姓名==
select
ename,sal
from
emp
where
sal < 3000;
其余可參考之前的表格扩淀,這里我不做過多演示楔敌。
條件查詢between and
between and 在使用的時(shí)候必須是左小右大
select
ename,sal
from
emp
where
sal between 2000 and 3000;
between and 還可以使用在字符串方面(左為閉區(qū)間,右為開區(qū)間)
select
ename
from
emp
where
ename between 'A' and 'C';
條件查詢 is null 驻谆、is not null
在數(shù)據(jù)庫當(dāng)中NULL不是一個(gè)值卵凑,代表什么也沒有庆聘,為空∩茁空不是一個(gè)值伙判,不能用等號(hào)判斷,必須使用 is null 或 is not null 進(jìn)行判斷黑忱。
查詢comm為null的數(shù)據(jù)
select
ename,comm
from
emp
where
comm is null;
查詢comm為不為null的數(shù)據(jù)
select
ename,comm
from
emp
where
comm is not null;
條件查詢 in
select
ename,sal
from
emp
where
sal in(3000,5000);
in:sal值為3000和5000的數(shù)據(jù)
select
ename,sal
from
emp
where
sal not in(3000,5000);
not in:sal不在(3000,5000)這幾個(gè)值中
四宴抚、模糊查詢
==搭配%使用==
%代表一個(gè)或多個(gè)字符的通配符
(1)
select
ename,sal
from
emp
where
ename like '%S%';
ename like '%S%'; 名稱中帶有S的名字
(2)
select
ename,sal
from
emp
where
ename like 'S%';
查詢名稱中開始字符為S的數(shù)據(jù)
(3)
select
ename,sal
from
emp
where
ename like '%S';
插敘名稱中最后一個(gè)字符為S的數(shù)據(jù)
==搭配_使用==
_代表僅僅一個(gè)字符的通配符
select
ename,sal
from
emp
where
ename like 'KIN_';
五、分組查詢
group by :按照某個(gè)字段或者某些字段進(jìn)行分組
having:having是對(duì)分組之后的數(shù)據(jù)進(jìn)行再次過濾甫煞。
select
AVG(sal),deptno
from
emp
group by
deptno;
select
deptno
from
emp
group by
deptno
having
deptno >= 20;
==注意事項(xiàng)==
- GROUP BY后不可以接列的別名
- GROUP BY 后不能接數(shù)字
- GROUP BY 后不可以接select后沒有的列名
- 如果一個(gè)SELECT中使用了分組函數(shù)菇曲,任何不在分組函數(shù)中的列(表達(dá)式)必須要在GROUP BY中
六、連接查詢
在使用數(shù)據(jù)庫查詢語句時(shí)抚吠,單表的查詢有時(shí)候不能滿足項(xiàng)目的業(yè)務(wù)需求常潮,在項(xiàng)目開發(fā)過程中,有很多需求都是要涉及到多表的連接查詢
==連接查詢分類==
- 內(nèi)連接
- 等值連接
- 非等值連接
- 自連接
- 外連接
- 左外連接(左連接)
- 右外連接 (右連接)
- 全連接
內(nèi)連接
等值連接
特點(diǎn):條件是等量關(guān)系
查詢每個(gè)員工的部門名稱楷力,要求顯示員工名和部門名
select
e.ename,d.dname
from
emp e
join
dept d
on
e.deptno = d.deptno;
非等值連接
特點(diǎn):連接條件是非等量關(guān)系
找出每個(gè)員工的工資等級(jí)喊式,要求顯示員工名、工資萧朝、工資等級(jí)
select
e.ename,e.sal,s.grade
from
emp e
join
salgrade s
on
e.sal between s.losal and s.hisal;
自連接
特點(diǎn):一張表當(dāng)成兩張表岔留。自己連接自己
找出每個(gè)員工的上級(jí)領(lǐng)導(dǎo),要求顯示員工名和對(duì)應(yīng)的領(lǐng)導(dǎo)名稱
select
e.ename,m.ename
from
emp e
left join
emp m
on
e.mgr = m.empno;
外連接
假設(shè)A和B表進(jìn)行連接剪勿,使用外連接的話贸诚,AB兩張表中有一張表是主表,一張表是副表厕吉,主要查詢主表中的數(shù)據(jù)酱固,捎帶著查詢副表,當(dāng)副表中的數(shù)據(jù)沒有和主表中的數(shù)據(jù)匹配上头朱,副表自動(dòng)模擬出NULL與之匹配运悲。
外連接分類
- 左外連接(左連接):表示左邊的這張表是主表。
- 右外連接(右連接):表示右邊的這張表是主表项钮。
#基本語法
左表 left/right join 右表 on 左表.字段=右表.字段
七班眯、子查詢
==1、where后面嵌套子查詢==
select
ename,sal
from
emp
where
sal > (select avg(sal) from emp);
==2烁巫、from后面嵌套子查詢==
列出各種工作的最低工資及從事此工作的雇員姓名
select
e.ename,t.*
from
emp e
join
(select job,min(sal) as minsal from emp group by job) t
on
e.job=t.job and e.sal=t.minsal;
3署隘、select后面嵌套子查詢
查詢每個(gè)員工所在部門名稱
select
e.ename,d.dname,
(select d.dname from dept d where e.deptno = d.deptno) as dname
from
emp e;
覺得不錯(cuò)的小伙伴可以點(diǎn)贊關(guān)注和收藏哦!如有錯(cuò)誤可以指出來亚隙。
<font size="4">Java學(xué)習(xí)路線目錄索引</font>