diff --git "a/04 \350\224\241\347\233\237/3-21 \347\273\203\344\271\240.txt" "b/04 \350\224\241\347\233\237/3-21 \347\273\203\344\271\240.txt" new file mode 100644 index 0000000000000000000000000000000000000000..9b014de94c20bf7c4d8762874c3714cabea16c4b --- /dev/null +++ "b/04 \350\224\241\347\233\237/3-21 \347\273\203\344\271\240.txt" @@ -0,0 +1,317 @@ +-- -- 0.创建数据库练习 +-- -- 1.直接创建数据库db3 +create database db3 charset utf8; + +-- -- 2.判断是否存在并创建数据库db4 +create database if not EXISTS db4 charset utf8; + +-- -- 3.查看所有的数据库 +show databases; +-- -- 4.删除db3数据库 +drop database db3; +-- -- 5.查看正在使用的数据库 +select database (); +-- -- 6.使用db4数据库 +use db4; +-- -- +-- -- +-- -- 1.创建表练习 +-- -- - 需求:设计一张学生表,请注重数据类型、长度的合理性 +-- -- +-- -- 1.编号 +-- -- 2.姓名,姓名最长不超过10个汉字 +-- -- 3.性别,因为取值只有两种可能,因此最多一个汉字 +-- -- 4.生日,取值为年月日 +-- -- 5.入学成绩,小数点后保留两位 +-- -- 6.邮件地址,最大长度不超过 64 +-- -- 7.家庭联系电话,不一定是手机号码,可能会出现 - 等字符 +-- -- 8.学生状态(用数字表示,正常、休学、毕业...) +create table stu( + id INT, + name varchar(10), + sex enum('男','女'), + age datetime, + cj double(3,2), + dz varchar(64), + dh varchar(11), + zt int +); + +-- -- 2.更改表练习 +-- -- 1.修改stu表名为student +alter table stu rename student; +-- -- 2.给学生表添加一列remark,类型为varchar(20) +alter table student add remark varchar(20); +-- -- 3.修改remark列的类型是varchar(100) +alter table student modify remark varchar(100); +-- -- 4.修改remark列的名变为intro,类型varchar(30) +alter table student change remark intro varchar(30); +-- -- 5.删除intro列 +alter table student drop intro; +-- -- 3.添加数据 +-- -- 1.创建表 +-- +create table mysql( + id int, + name varchar(10), + age int, + sex enum('男','女'), + address varchar(15) +); +-- -- 2.插入部分数据,给id name age sex赋值 +-- /* +-- 1.在mysql中插入字符数据,数据使用单引号或者双引号都可以,建议使用单引号 +-- 2.在mysql中插入的数据是date类型,那么将数据书写在单引号或者双引号都可以 +-- */ +-- +insert into mysql values +(1,'罗翔','20','男','莆田'); +-- -- 3.插入所有的字段,不写字段名 +-- +insert into mysql values +(2,'张三','28','女','泉州'); +-- -- 4.插入所有的字段,写出字段名 +-- +insert into mysql (id,name,age,sex) values (3,'李四','19','男','泉州'); +-- -- 5.批量插入数据 +insert into mysql values +(4,'王五','23','女','龙岩'), +(5,'熊大','16','男','狗熊岭'), +(6,'熊二','14','男','狗熊岭'); +-- -- 插入数据注意 +-- -- 6.插入数据时 省略列名,那么如果不需要给列赋值那么使用null +-- +insert into mysql values +(7,'吉吉',null,'男','狗熊岭'), +(8,'毛毛',null,'女','狗熊岭'); +-- 4.修改数据 +-- +-- -- 1.修改数据:修改性别都变为女 +update mysql set sex='女'; +-- -- 2.修改数据:带条件修改id是2的学生性别变为男 +update mysql set sex='男' where id=2; +-- -- 3.一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京 +-- +update mysql set age=26,address='北京' where id=3; +-- 5.删除数据 +-- -- 1.带条件删除数据,删除id是3的记录 +-- +delete from mysql where id=3; +-- -- 2.带条件删除数据,删除id是1和2的记录 id in(1,2) : 表示id的值是1或者2 +-- +delete from mysql where id in(1,2); +-- +-- -- 3.不带条件删除 +-- -- 还可以使用:DDL +-- -- 这里的table可以省略 +-- +truncate mysql; +-- 6.查询数据 +-- +create table b1( + id INT, + name varchar(10), + sex enum('男','女'), + age int, + address varchar(15), + math int, + english int + +); + + insert into b1 VALUES + (1,'萧熏儿','女',19,'湖南',66,78), + (2,'萧炎','男',20,'武汉',98,87), + (3,'赵四','女',37,'湖南',56,77), + (4,'赵韵','男',20,'福建',76,65), + (5,'赵嫣','男',20,'福建',86,null), + (6,'韩枫','男',20,'福建',99,99), + (7,'独孤求败','女',20,'广东',99,99), + (8,'彩鳞','女',33,'云南',56,65), + (9,'陈楚河','男',33,'北京',66,55), + (10,'吴磊','男',31,'上海',75,68); +-- +-- -- 1.查询多个字段 +-- -- * 表示所有字段 +select * from b1; +-- +-- -- 2.写出查询每列的名称 +-- +select id 编号,name 姓名,sex 性别,age 年龄,address 地址,math 数学,english 英语 from b1; +-- -- 3.查询表中name和age列,name列的别名为姓名,age列的别名为年龄\ +select name 姓名,age 年龄 from b1; + +-- -- 使用as起给字段和表起别名 +-- -- as可以省略 +-- +select id as 编号,name as 姓名,sex as 性别,age as 年龄,address as 地址,math as 数学,english as 英语 from b1 b; + +-- +-- -- 4.去重 +-- -- 对age去重 +-- +select distinct age from b1; +-- +-- -- 对age和address去重 +-- -- 如果多个字段一起去重,如果所有的字段值全部一样才会去重 +-- +select distinct age, address from b1; +-- +-- +-- 7.带条件的查询 +-- -- 1.查询数学成绩大于80学生 +-- +select * from b1 where math >80; +-- -- 2.查询英语成绩小于等于80学生 +-- +select * from b1 where english<= ifnull(80,0); +-- -- 3.查询年龄等于20的学生 +-- +select * from b1 where age=20; +-- -- 4.查询年龄不等于20的学生 +-- +select * from b1 where age!=20; +-- +-- -- 5.查询年龄大于35并且性别是男的学生 +-- +select * from b1 where age>35 and sex='男'; +-- -- 6.查询年龄大于35或者性别是男的学生 +-- +select * from b1 where age>35 or sex='男'; + +-- -- 7.查询id是1 3 5的学生 +-- +select * from b1 where id in (1,3,5); +-- +-- -- 8.查询id不是1 3 5的学生 +-- -- not in 是in的取反,表示不在什么其中 +-- +select * from b1 where id not in (1,3,5); + +-- -- 范围查询 +-- -- 9.英语成绩在75和90之间 +-- +select * from b1 where english BETWEEN 75 and 90; +-- +-- -- 模糊查询 使用like +-- -- 10.查询姓赵的学生 +-- -- name like '赵%' 表示name的值以赵开始,后面是什么都可以 +-- -- %在模糊查询中表示任意个数的字符 +-- +select +* +from +b1 +where +name like '赵%' +-- +-- -- 11.查询包含岩 +-- -- name like '%岩%' 表示name的值只要含有岩即可,前后%表示匹配任意多个字符 +-- +select * from b1 where name like '%岩%'; +-- +-- -- 12.查询姓赵并且是三个字的学生 +-- -- _下划线在模糊查询中表示单个字符 +-- +select * from b1 where name like '赵__'; + +-- +-- -- 排序 +-- -- desc表示降序 +-- -- 13.按照年龄降序排序 +-- +select * from b1 ORDER BY age desc; +-- -- 14.先按照年龄降序排序,如果年龄相同在按照数学降序排序 +-- +select * from b1 ORDER BY age desc,math desc; +-- -- 15.先按照年龄降序排序,如果年龄相同在按照数学升序排序 +-- +select * from b1 ORDER BY age desc,math asc; + +-- +-- -- 聚合函数 +-- -- 16.查询学生总数即有多少名学生 +-- +select count(id) from b1; +-- -- 17.查询数学成绩总分数 +-- +select sum(math) from b1; +-- -- 18.查询数学成绩最高分数 +-- +select max(math) from b1; +-- -- 19.统计数学和英语总和值 +-- -- 实现一:分别统计数学和英语的每个总成绩,然后进行相加 +-- -- 实现二:分别统计每个人的数学和英语成绩,然后将每个人的数学和英语成绩相加 +-- /* +-- 结果是:380 少了柳岩的90 +-- sum(math+english): +-- 问题原因: +-- 解决上述问题:使用mysql自带函数:ifnull(字段值,默认值) +-- 说明: +-- ifnull(字段值,默认值) +-- 如果字段值是null,那么使用默认值作为ifnull函数的整体结果 +-- 如果字段值不是null,那么使用字段值作为ifnull函数的整体结果 +-- 举例: +-- ifnull(english,0): +-- 1)假设english的值是null===>ifnull(null,0)===>整体结果是0 +-- 2)假设english的值是80===>ifnull(80,0)===>整体结果是80 +-- */ +select ifnull(sum(math+english),0) from b1; + +-- +-- -- 分组 +-- -- 准备数据 + create table car( + id int, + color char(2), + price float + ); + + insert into car(id,color,price) values(1,'黄色',16); + insert into car(id,color,price) values(2,'黄色',16); + insert into car(id,color,price) values(3,'蓝色',5); + insert into car(id,color,price) values(4,'红色',60); + insert into car(id,color,price) values(5,'白色',8); + insert into car(id,color,price) values(6,'红色',60); +-- +-- -- 1.查询每种颜色车辆的总价 +-- +select sum(price) from car group by price; +-- -- 2.查询每种颜色车辆总价大于30车辆的颜色和总价 +-- +select color,sum(price) from car GROUP BY price HAVING sum(price)>30; +-- -- 3.注意:分组查询的结果最好是分组字段和聚合函数,不要是其他字段 +-- +-- -- 4.where后面不能使用聚合函数 报错的 +-- +-- -- 小结:where是在分组前筛选,having是在分组后筛选 +-- -- 5.查询车的单价大于15的每种颜色车辆总价大于30车辆的颜色和总价 +-- +select color,sum(price) from car where price>15 GROUP BY color HAVING sum(price)>30; +-- +-- -- 分页 +-- -- 1.分页查询数据,每页显示2条数据 +-- -- 第一页 +-- -- 0 表示起始索引,对应第一行数据 +-- -- 2表示每页显示2条数据 +-- +select * from car limit 0,2; +-- +-- -- 当起始索引是0的情况下可以不写索引0,写法如下, +-- -- 下面的2表示每页显示的数据行数 +-- +-- -- 第二页 +-- -- 第一个2表示起始索引,对应三行数据 +-- -- 第二个2表示每页显示两条数据,对于第二个参数每个公司基本是固定的,最后一页剩下几行数据 +-- -- 就会显示几行数据 +-- +select * from car limit 2,2; +-- -- 第三页 +-- /* +-- 公式: 起始索引 = (当前页码-1)*每页显示的条数 +-- 0 1 2 +-- 2 2 2 +-- 4 3 2 +-- */ +select * from car LIMIT 4,2; +-- \ No newline at end of file