From d327b2451de477660e22a3e1b6c856a8d6065258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B4=94=E7=A8=8B=E7=91=9E?= <2425059626@qq.com> Date: Thu, 23 Mar 2023 23:49:24 +0800 Subject: [PATCH] =?UTF-8?q?MySQL=E5=A4=8D=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...56\345\272\223\345\244\215\344\271\240.md" | 429 ++++++++++++++++++ 1 file changed, 429 insertions(+) create mode 100644 "32 \345\264\224\347\250\213\347\221\236/20230323\346\225\260\346\215\256\345\272\223\345\244\215\344\271\240.md" diff --git "a/32 \345\264\224\347\250\213\347\221\236/20230323\346\225\260\346\215\256\345\272\223\345\244\215\344\271\240.md" "b/32 \345\264\224\347\250\213\347\221\236/20230323\346\225\260\346\215\256\345\272\223\345\244\215\344\271\240.md" new file mode 100644 index 0000000..814a896 --- /dev/null +++ "b/32 \345\264\224\347\250\213\347\221\236/20230323\346\225\260\346\215\256\345\272\223\345\244\215\344\271\240.md" @@ -0,0 +1,429 @@ +```sql +#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; +``` + + +​ + +```sql +#1.创建表练习 +#- 需求:设计一张学生表,请注重数据类型、长度的合理性 +create table student( +hao int comment'编号', +name varchar(10), +sex varchar(1), +birthday date, +cj varchar(20), +site varchar(10), +phone varchar(20), +state int +); +``` + + + +```sql +#1.编号 +#2.姓名,姓名最长不超过10个汉字 +#3.性别,因为取值只有两种可能,因此最多一个汉字 +#4.生日,取值为年月日 +#5.入学成绩,小数点后保留两位 +#6.邮件地址,最大长度不超过 64 +#7.家庭联系电话,不一定是手机号码,可能会出现 - 等字符 +#8.学生状态(用数字表示,正常、休学、毕业...) +``` +```sql +#2.更改表练习 + -- 1.修改stu表名为student + alter table student rename to stu; + -- 2.给学生表添加一列remark,类型为varchar(20) + alter table stu add remark varchar(20); + -- 3.修改remark列的类型是varchar(100) +alter table stu modify remark varchar(100); + -- 4.修改remark列的名变为intro,类型varchar(30) + alter table stu change remark intro varchar(30); + -- 5.删除intro列 + delete from stu where intro; +``` + +​ + +```sql +3.添加数据 + -- 1.创建表 + create table abc( + id int, + name varchar(10), + age int, + sex varchar(10), + address varchar(10), + yuwen varchar(10), + shux varchar(10), + yyu varchar(10) + ); +``` + +​ +```sql +-- 2.插入部分数据,给id name age sex赋值 +/* + 1.在mysql中插入字符数据,数据使用单引号或者双引号都可以,建议使用单引号 + 2.在mysql中插入的数据是date类型,那么将数据书写在单引号或者双引号都可以 +*/ + +-- 3.插入所有的字段,不写字段名 +insert into abc values +(1,'蔡坤',24,'男','北京',70,80,90), +(2,'蔡徐',24,'男',NULL,40,60,100), + (3,'谭',18,'女',NULL,20,3,1), + (4,'帅',18,'女',NULL,120,36,45), + (5,'猴子',18,'女',NULL,100,100,100), + (6,'亮',18,'女',NULL,42,12,23), + (7,'敏',18,'女',NULL,0,0,0), + (8,'大',18,'女',NULL,2,1,3), + (9,'郝',18,'女',NULL,1,65,78); +``` + + +​ +```sql +-- 4.插入所有的字段,写出字段名 +insert into abc(id,name,age,sex) values + (2,'谭帅',18,'女'), + (2,'谭帅',18,'女'), + +-- 5.批量插入数据 +-- 插入数据注意 +-- 6.插入数据时 省略列名,那么如果不需要给列赋值那么使用null +alter table abc add address varchar(10); +alter table abc +alter table abc modify age varchar(10); +``` + +4.修改数据 + s5.删除数据 + -- 1.带条件删除数据,删除id是3的记录 + DELETE FROM abc where id=3; + + +```sql +-- 2.带条件删除数据,删除id是1和2的记录 id in(1,2) : 表示id的值是1或者2 +delete from abc where id in(1,2); +``` + + +```sql +ql-- 3.不带条件删除 +-- 还可以使用:DDL +-- 这里的table可以省略 +``` + + +​ +6.查询数据 + + +```sql +s-- 1.查询多个字段 +-- * 表示所有字段 +select * from abc; + +-- 2.写出查询每列的名称 +select id as 学号,name 姓名,age 年龄,sex 性别,address 地址 from abc; + +-- 3.查询表中name和age列,name列的别名为姓名,age列的别名为年龄 +-- 使用as起给字段和表起别名 +-- as可以省略 +``` + + +```sql +-- 4.去重 +-- 对age去重 +select distinct age from abc; +``` + + +```sql +-- 对age和address去重 +-- 如果多个字段一起去重,如果所有的字段值全部一样才会去重 +select distinct age, address from abc; +``` + + + +7.带条件的查询 + -- 1.查询数学成绩大于80学生 + select name from abc where shux>80; + +```sql +-- 2.查询英语成绩小于等于80学生 +select name from abc where yyu<=80; +-- 3.查询年龄等于20的学生 +select name from abc where age=20; + +-- 4.查询年龄不等于20的学生 +``` +select name from abc where not age =20; + +```sql +-- 5.查询年龄大于35并且性别是男的学生 +select name from abc where age>35 and sex='男'; + +-- 6.查询年龄大于35或者性别是男的学生 +SELECT NAME from abc where age>34 or sex='男'; + +-- 7.查询id是1 3 5的学生 +SELECT name from abc where not id=1 or id=3 or id=5; +``` + + +```sql +-- 8.查询id不是1 3 5的学生 +-- not in 是in的取反,表示不在什么其中 + SELECT name from abc where id=1 or id=3 or id=5; +-- 范围查询 +-- 9.英语成绩在75和90之间 +select name from abc between 75 and 90 order by ; +``` + + +```sql +-- 模糊查询 使用like +-- 10.查询姓赵的学生 +-- name like '赵%' 表示name的值以赵开始,后面是什么都可以 +-- %在模糊查询中表示任意个数的字符 +select name from abc where name like'赵%'; +``` + + + -- 11.查询包含岩 + -- name like '%岩%' 表示name的值只要含有岩即可,前后%表示匹配任意多个字符 + SELECT name from abc where name like'%岩%'; + +```sql +-- 12.查询姓赵并且是三个字的学生* + + *-- _下划线在模糊查询中表示单个字符* + + select * from abc where `name` like '赵__'; + + + + + + *-- 排序* + + *-- desc表示降序* + + *-- 13.按照年龄降序排序* + + select * from abc ORDER BY age desc; + + + + *-- 14.先按照年龄降序排序,如果年龄相同在按照数学降序排序* + + select * from abc order by age desc, shuxue desc; + + *-- 15.先按照年龄降序排序,如果年龄相同在按照数学升序排序* + + select * from abc order by age desc, shuxue asc; + + + + *-- 聚合函数* + + *-- 16.查询学生总数即有多少名学生* + + select **COUNT**(id) from abc; + + *-- 17.查询数学成绩总分数* + + select **SUM**(shuxue) from abc; + + *-- 18.查询数学成绩最高分数* + + select **MAX**(shuxue) from abc; + + *-- 19.统计数学和英语总和值* + + select **SUM**(english)+**SUM**(shuxue) from abc; + + *-- 实现一:分别统计数学和英语的每个总成绩,然后进行相加* + + select **sum**(english),**SUM**(shuxue),**SUM**(english)+**SUM**(shuxue) from abc; + + *-- 实现二:分别统计每个人的数学和英语成绩,然后将每个人的数学和英语成绩相加* + + */** + +​ *结果是: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* + + **/* + + + + + + + +\``` + + + +\```sql + + + + + + *-- 分组* + +​ *-- 准备数据* + +​ 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 color,**SUM**(price) from car GROUP BY color; + +​ *-- 2.查询每种颜色车辆总价大于30车辆的颜色和总价* + +select color,**sum**(price) from car GROUP BY color 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; + +\``` + + + +\```sql + +*-- 分页* + +​ *-- 1.分页查询数据,每页显示2条数据* + +​ *-- 第一页* + +​ *-- 0 表示起始索引,对应第一行数据* + +​ *-- 2表示每页显示2条数据* + +select * from car limit 0,2; + +\``` + + + + + +​ -- 当起始索引是0的情况下可以不写索引0,写法如下, + +​ -- 下面的2表示每页显示的数据行数 + + + +​ -- 第二页 + +​ -- 第一个2表示起始索引,对应三行数据 + +​ -- 第二个2表示每页显示两条数据,对于第二个参数每个公司基本是固定的,最后一页剩下几行数据 + +​ -- 就会显示几行数据 + + + +​ -- 第三页 + +​ /* + +​ 公式: 起始索引 = (当前页码-1)*每页显示的条数 + +​ 0 1 2 + +​ 2 2 2 + +​ 4 3 2 + +​ */ +``` + -- Gitee