Linux云计算训练营笔记day09(MySQL数据库)

发布于:2025-05-16 ⋅ 阅读:(17) ⋅ 点赞:(0)

Linux云计算训练营笔记day09(MySQL数据库)

主键约束
PRIMARY KEY 非空 唯一

外键约束

FOREIGN KEY 声明了外键的列上插入的值必须在另一个表的主键上出现过

-- Active: 1747188627686@@127.0.0.1@3306@tedu
CREATE DATABASE job CHARSET=utf8;

use job;

-- 部门表 dept
CREATE TABLE dept(
    did INT PRIMARY KEY AUTO_INCREMENT,
    dname VARCHAR(10) UNIQUE
);

INSERT INTO dept VALUES(10,"研发部");
INSERT INTO dept VALUES(20,"运营部");
INSERT INTO dept VALUES(30,"市场部");

SELECT * from dept;
-- 员工表 emp
CREATE Table emp(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    ename VARCHAR(10) not NULL,
    birthday date,
    salary DOUBLE(8,2),
    deptId INT,
    Foreign Key (deptId) REFERENCES dept(did)
);

INSERT INTO emp VALUES(1,"王林","1999-11-17",8888.88,10);
INSERT INTO emp VALUES(2,"李木婉","2000-11-17",9999.99,20);

SELECT * from emp;

数据的导入和导出

数据的导出

mysqldump -u用户名 -p密码 数据库的名字 > 文件的名字.sql
把当前电脑的数据库导入出去

mysqldump -uroot -proot job > job.sql

数据的导入

数据准备tedu.sql
点击如下链接可以下载
https://download.csdn.net/download/weixin_46411355/90842134

把别人的数据库导入进来

mysql -uroot -proot < tedu.sql

DQL 数据查询语言

查询 SELECT

查指定字段

select 字段1,字段2 from 表; 查指定字段

查所有字段

select * from 表; 查所有字段

where 过滤条件

where 过滤条件 ,会把满足的条件查询出来

use tedu;

-- 查询所有字段
SELECT * FROM teacher;

desc teacher;

-- 查看指定字段
SELECT name,salary,gender,title from teacher;
-- 查看所有学生的名字,年龄,性别,生日
desc student;
SELECT name,age,gender,birth from student;

-- 查看职称为 一级讲师 的老师的名字,职称,工资,年龄
select name,title,salary,age
from teacher
where title="一级讲师";

-- 查看除了 刘苍松 以为的所有老师的名字,工资,奖金,职位
SELECT name,salary,comm,title
from teacher
where name <> "刘苍松";

-- 查看 职位是 大队长 的学生的名字,年龄, 性别
SELECT name,age,gender 
FROM student
where job="大队长";

-- 查看年龄在30岁以上(包含)的老师的名字,职称,工资,奖金
SELECT name,title,salary,comm
from teacher
where age>=30;

-- 查看2层以上(包含)的班级有哪些,列出班级名字,所在楼层
SELECT name,floor
from class
WHERE floor>=2;
and 和 or

连接多个条件
and 与 并且 两边都为真结果才为真
or 或 两边都为假结果才是假

and的优先级高于or的
如果想提高优先级,可以使用( )

-- 查看 7岁 的 大队长 都有谁,列出这些学生的名字,年龄,性别和职称
SELECT name,age,gender,job
from student
where age=7 and job="大队长";

-- 查看班级编号小于6的所有中队长都有谁,列出这些学生的名字,年龄,性别,班级编号和职位
SELECT name,age,gender,class_id,job
from student
WHERE class_id<6 and job="中队长";

-- 查看所有一级讲师和三级讲师的名字,职称title,工资
SELECT name,title,salary
from teacher
where title="一级讲师" or title="三级讲师";

-- 查看所有大队长, 中队长,小队长的名字,性别,年龄和职位job
SELECT name,gender,age,job
from student
WHERE job="大队长" or job="中队长" or job="小队长";

-- 查看班级编号在6(包含)以下的所有大队长和中队长的名字,年龄,性别,班级和职位
SELECT name,age,gender,class_id,job
from student
WHERE class_id<=6 and (job="大队长" or job="中队长");

desc student;
in 和 not in

in(列表) 表示字段的值在列表中
not in(列表) 表示字段的值不在列表中

-- 查看所有大队长,中队长和小队长的名字,性别,年龄和职位
SELECT name,gender,age,job
from student
WHERE job in ("大队长","中队长","小队长");

-- 查看所有 一级讲师, 二级讲师,三级讲师的名字,职称,工资和性别
SELECT name,title,salary,gender
from teacher
WHERE title in ("一级讲师", "二级讲师","三级讲师");

-- 查看除了一级讲师和二级讲师之外的所有老师的名字,职称,工资
SELECT name,title,salary
from teacher
WHERE title not in ("一级讲师", "二级讲师");
-- WHERE title <> "一级讲师" and title <> "二级讲师";

-- 查看除了大队长,中队长,小队长之外的其他学生的名字,职位,性别和年龄
SELECT name,job,gender,age
from student
WHERE job not in ("大队长","中队长","小队长");
between…and…

between n and m 在n和m之间
not between n and m 不在n和m之间

-- 查看工资在2000到5000之间的老师的名字,性别,年龄,工资
SELECT name,gender,age,salary
from teacher
WHERE salary BETWEEN 2000 and 5000;

-- 查看年龄在7岁到10岁的学生名字,性别,年龄
SELECT name,gender,age 
from student
WHERE age BETWEEN 7 and 10;

-- 查看年龄在20到35之间的男老师都有谁,列出名字,性别,年龄,职称
SELECT name,gender,age,title
from teacher
WHERE age BETWEEN 20 and 35
and gender="男";

-- 查看所有3-5层的班级都有哪些,列出班级名称和所在楼层
SELECT name,floor
from class
WHERE floor BETWEEN 3 and 5;

-- 查看年龄在7到10岁以外的学生的名字,性别,年龄
SELECT name,gender,age 
from student
WHERE age not BETWEEN 7 and 10;

distinct

distinct 去除重复行
distinct用在select关键字之后,可以将结果中指定字段重复的记录去除
distinct后面可以指定多个字段

-- 查看老师都有哪些职称
SELECT DISTINCT title
from teacher;
-- 查看学生都有哪些职位
select DISTINCT job
from student;
-- 查看各年龄段的学生都有哪些职位
SELECT DISTINCT age,job
from student;

练习:

-- 1.查看负责课程编号为1的男老师都有谁?
SELECT name
from teacher
WHERE subject_id=1 and gender="男";

-- 2.查看工资高于5000的女老师都有谁?
SELECT name
from teacher
WHERE salary>5000 and gender="女";

-- 3.查看工资高于5000的男老师或所有女老师的工资?
SELECT name,gender,salary
from teacher
WHERE salary>5000 and gender="男" or gender="女"
;
-- 4.查看所有9岁学生的学习委员和语文课代表都有谁?
SELECT name,age,job
from student
WHERE age=9 and job in ("学习委员","语文课代表");

-- 5.查看工资在6000到10000之间的老师以及具体工资
SELECT name,salary
from teacher
WHERE salary BETWEEN 6000 and 10000;

-- 6.查看工资在4000到8000以外的老师以及具体工资
SELECT name,salary
from teacher
WHERE salary NOT BETWEEN 4000 and 8000;

-- 7.查看老师负责的课程编号都有什么?
SELECT DISTINCT subject_id
from teacher;

-- 8.查看所有女老师的职称都是什么?
SELECT DISTINCT title
from teacher
WHERE gender="女";

-- 9.查看7-10岁男同学的职位都有哪些?
SELECT DISTINCT job
from student
WHERE age BETWEEN 7 and 10
AND gender="男";

-- 10.查看一级讲师和二级讲师的奖金是多少?
SELECT name,comm 
from teacher
WHERE title IN ("一级讲师","二级讲师");

-- 11.查看除了老板和总监的其他老师的工资和奖金是多少?
SELECT name,salary,comm
from teacher
WHERE title not in ("老板","总监");

-- 12.查看 3年级2班 和 5年级3班 在哪个楼层?
SELECT name,floor 
from class
WHERE name in ("3年级2班","5年级3班");
like 模糊查询

两个通配符
_ 表示一个字符
% 表示任意多个字符 0-n
like %x% 只要包含x
like x% 表示以x开头 iphone%
like %x 表示以x结尾
like _x% 表示第二个字符是x
like %x_y 倒数第三个是x,最后一个是y
like x%y 表示以x开头,以y结尾
like __x% 表示第三个字符是x

- 查看名字中包含 晶 的老师都有谁
SELECT name
from teacher
WHERE name LIKE "%晶%";

-- 查看姓张的学生都有谁
SELECT name 
from student
WHERE name LIKE "张%";

-- 查看三个字名字中第二个字是 平 的学生都有谁
SELECT name
from student
WHERE name LIKE "_平_";

-- 查看最后一个字是 晶 的老师都有谁
SELECT name 
from teacher
WHERE name LIKE "%晶";

-- 1.查询名字姓 李 的学生姓名
SELECT *
from student
WHERE name LIKE "李%";

-- 2.查询名字中包含 江 的学生姓名
SELECT *
from student
WHERE name LIKE "%江%";

-- 3.查询名字以 郭 结尾的学生姓名
SELECT *
from student
WHERE name LIKE "%郭";

-- 4.查询 9-12岁里是 课代表 的学生信息
SELECT *
from student
WHERE age BETWEEN 9 and 12
and job LIKE "%课代表";

-- 5.查询名字第二个是 苗 的学生信息
SELECT * 
from student
WHERE name LIKE "_苗%";

-- 6.查询姓 邱 的课代表都是谁
SELECT *
from student
WHERE name LIKE "邱%"
AND job LIKE "%课代表";

-- 7.查看哪些学生是 课代表? 列出他的名字和职位
SELECT name,job
from student
WHERE job LIKE "%课代表";

-- 8.查看所有的2班都在哪层?
SELECT *
from class
WHERE name LIKE "%2班";
NULL

在数据库中 所有字段默认值都是NULL,他表示不存在,是空
NULL不能算作一个值,应该是一种状态
判断NULL
is NULL 判断一个字段的值是否为空
is not NULL 判断一个字段的值是否为非空
不可以用 = 或者 <> 来判断NULL

-- 哪些老师没有奖金
SELECT *
from teacher
WHERE comm is NULL;

-- 哪些老师有奖金  (哪些老师的奖金不为空 is NOT NULL)
SELECT *
from teacher
WHERE comm is NOT NULL and comm <> 0;

order by

把查询的结果按照指定的字段升序或降序
asc: 按照指定字段升序 小到大
desc: 按照指定字段降序 大到小
不指定排序方式,默认为升序
如果按照多字段排序:
首先将结果集按照第一个字段进行排序
当第一个字段值重复的时候,在按照第二个字段进行排序
优先级: order by后第一个字段为最先,第二个排第二

日期比较大小规则: 距离现在越近的日期越大
NULL在数据库中被视作最小值

-- 查看老师的工资从高到底
SELECT name,salary
from teacher
ORDER BY salary desc;

-- 查看老师的奖金排名
SELECT name,comm
from teacher
ORDER BY comm desc;

-- 查看学生的生日,按照从远到近(小到大 升序)
SELECT *
from student
ORDER BY birth ASC; 

-- 查看7-10岁的学生信息,学生按照年龄从大到小排序(同年龄的看生日)
SELECT name,birth 
from student
WHERE age BETWEEN 7 and 10
ORDER BY birth;

-- 查看老师的工资和奖金,首先按照奖金的升序,在按照的工资的降序
SELECT name,salary,comm
from teacher
ORDER BY comm ASC,salary desc;

分页查询

分页查询: 将查询的结果按照分段显示出来
当查询的结果较多时,就可以使用分页查询

语法:
select xx
from xx
where xx
order by xx
limit M,N
M和N是两个整数

M: 表示跳过结果集中多少条记录(起始位置)
N: 表示从M位置开始查询出多少条记录
分页中常见的参数:

  1. 当前的页数
  2. 每页显示多少条记录
    M: (当前页数-1)*每页显示的条目数
    N: 每页显示多少条
-- 查看老师工资的前5名
-- 1)按照工资进行降序  2)分页查询
-- M: (当前页数-1)*N  M:(1-1)X5  => M: 0
-- N: 5
SELECT name,salary
from teacher
ORDER BY salary desc
LIMIT 0,5;
-- 第一页的数据  M:(1-1)X5    M: 0     N:5
-- 第二页的数据   M: (2-1)X5    M: 5    N: 5
SELECT name,salary
from teacher
ORDER BY salary desc
LIMIT 5,5;

-- 查看老师奖金信息,按照降序排序后,每页显示3条,显示第五页?
-- M: (5-1)x3  =>M:12    N:3
SELECT name,comm
from teacher
ORDER BY comm desc
LIMIT 12,3;

网站公告

今日签到

点亮在社区的每一天
去签到