From 0bf2ea322ca892b024941b210f5d0d929780d891 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B0=E6=B2=9B=E4=B8=9C?= <2409237500@qq.com> Date: Fri, 24 Mar 2023 01:31:13 +0800 Subject: [PATCH] =?UTF-8?q?MySQL=E8=80=83=E5=89=8D=E7=BB=83=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...23\346\227\245\347\273\203\344\271\240.md" | 285 ++++++++++++++++++ 1 file changed, 285 insertions(+) create mode 100644 "35\347\224\260\346\262\233\344\270\234/2023\345\271\2643\346\234\21023\346\227\245\347\273\203\344\271\240.md" diff --git "a/35\347\224\260\346\262\233\344\270\234/2023\345\271\2643\346\234\21023\346\227\245\347\273\203\344\271\240.md" "b/35\347\224\260\346\262\233\344\270\234/2023\345\271\2643\346\234\21023\346\227\245\347\273\203\344\271\240.md" new file mode 100644 index 0000000..fa9366c --- /dev/null +++ "b/35\347\224\260\346\262\233\344\270\234/2023\345\271\2643\346\234\21023\346\227\245\347\273\203\344\271\240.md" @@ -0,0 +1,285 @@ +# 练习 + +```mysql +/*创建数据库练习 + 1.直接创建数据库db3 + 2.判断是否存在并创建数据库db4 + 3.查看所有的数据库 + 4.删除db3数据库 + 5.查看正在使用的数据库 + 6.使用db4数据库*/ +CREATE DATABASE db3 CHARSET utf8; +CREATE DATABASE IF NOT EXISTS db4 CHARSET utf8; +DROP DATABASE db3; +USE db4; +SELECT DATABASE(); +/*创建表练习 + +- 需求:设计一张学生表,请注重数据类型、长度的合理性 + + 1.编号 + 2.姓名,姓名最长不超过10个汉字 + 3.性别,因为取值只有两种可能,因此最多一个汉字 + 4.生日,取值为年月日 + 5.入学成绩,小数点后保留两位 + 6.邮件地址,最大长度不超过 64 + 7.家庭联系电话,不一定是手机号码,可能会出现 - 等字符 + 8.学生状态(用数字表示,正常、休学、毕业...)*/ + drop table if exists stu; + CREATE TABLE stu ( + id INT, + `name` VARCHAR(10), + sex enum('男','女'), + shengre date, + chengji DOUBLE(5,2), + dizhi VARCHAR(20), + `call` VARCHAR(20), + zhuangtai INT, + age INT + ); + + /*更改表练习 + -- 1.修改stu表名为student + -- 2.给学生表添加一列remark,类型为varchar(20) + -- 3.修改remark列的类型是varchar(100) + -- 4.修改remark列的名变为intro,类型varchar(30) + -- 5.删除intro列*/ + alter table stu rename to student; + ALTER TABLE student ADD remark VARCHAR(20); + ALTER TABLE student MODIFY remark VARCHAR(100); + ALTER TABLE student CHANGE remark intro varchar(30); + /*添加数据 + -- 1.创建表 + + -- 2.插入部分数据,给id name age sex赋值 + /* + 1.在mysql中插入字符数据,数据使用单引号或者双引号都可以,建议使用单引号 + 2.在mysql中插入的数据是date类型,那么将数据书写在单引号或者双引号都可以 + */ + + -- 3.插入所有的字段,不写字段名 + + -- 4.插入所有的字段,写出字段名 + + -- 5.批量插入数据 + -- 插入数据注意 + -- 6.插入数据时 省略列名,那么如果不需要给列赋值那么使用null*/ + CREATE TABLE lx ( + id INT, + `name` VARCHAR(10), + age INT, + sex ENUM('男','女'), + address VARCHAR(20) + ); + INSERT INTO lx VALUES + (1,'郝先生',18,'男','郝家庄'), + (2,'张先生',18,'女','张家庄'), + (3,'梁先生',18,'男','梁家庄'), + (4,'李先生',18,'女', '李家庄'); + select id as "编号", `name` as "名字",age AS "年龄",sex AS "性别" from lx as 学生表; + +/*修改数据 + + +-- 1.修改数据:修改性别都变为女 +-- 2.修改数据:带条件修改id是2的学生性别变为男 +-- 3.一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京*/ + +UPDATE lx SET sex='女' WHERE sex='男'; +UPDATE lx SET sex='男' WHERE id=2; +UPDATE lx SET age=26, address='北京' WHERE id=3; +/*删除数据 + -- 1.带条件删除数据,删除id是3的记录 + + +-- 2.带条件删除数据,删除id是1和2的记录 id in(1,2) : 表示id的值是1或者2 + +-- 3.不带条件删除 +-- 还可以使用:DDL +-- 这里的table可以省略*/ + +DELETE FROM lx WHERE id=3; +DELETE FROM lx WHERE id in(1,2); +DELETE FROM lx; +/*查询数据 + +-- 1.查询多个字段 +-- * 表示所有字段 + +-- 2.写出查询每列的名称 + +-- 3.查询表中name和age列,name列的别名为姓名,age列的别名为年龄 +-- 使用as起给字段和表起别名 +-- as可以省略 + +-- 4.去重 +-- 对age去重 + +-- 对age和address去重 +-- 如果多个字段一起去重,如果所有的字段值全部一样才会去重*/ + +SELECT * FROM lx; +SELECT id, `name` ,age, sex, address FROM lx; +SELECT `NAME` AS 姓名, age AS 年龄 FROM lx; +select distinct age from lx; +/*带条件的查询 + -- 1.查询数学成绩大于80学生 + +-- 2.查询英语成绩小于等于80学生 + +-- 3.查询年龄等于20的学生 + +-- 4.查询年龄不等于20的学生 + +-- 5.查询年龄大于35并且性别是男的学生 + +-- 6.查询年龄大于35或者性别是男的学生 + +-- 7.查询id是1 3 5的学生 + +-- 8.查询id不是1 3 5的学生 +-- not in 是in的取反,表示不在什么其中 + +-- 范围查询 +-- 9.英语成绩在75和90之间 + +-- 模糊查询 使用like +-- 10.查询姓赵的学生 +-- name like '赵%' 表示name的值以赵开始,后面是什么都可以 +-- %在模糊查询中表示任意个数的字符 + +-- 11.查询包含岩 +-- name like '%岩%' 表示name的值只要含有岩即可,前后%表示匹配任意多个字符 + +-- 12.查询姓赵并且是三个字的学生 +-- _下划线在模糊查询中表示单个字符 + +-- 排序 +-- desc表示降序 +-- 13.按照年龄降序排序 + +-- 14.先按照年龄降序排序,如果年龄相同在按照数学降序排序 + +-- 15.先按照年龄降序排序,如果年龄相同在按照数学升序排序 + +-- 聚合函数 +-- 16.查询学生总数即有多少名学生 + +-- 17.查询数学成绩总分数 + +-- 18.查询数学成绩最高分数 + +-- 19.统计数学和英语总和值*/ + +CREATE TABLE xxb( + id INT, + `name` VARCHAR(10), + sex ENUM('男','女'), + age INT, + sc INT, + yc INT +); +INSERT INTO xxb VALUES +(1,'赵三','男',17,56,89), +(2,'龙岩','女',29,65,67), +(3,'李四','男',38,70,98), +(4,'老八','女',26,89,80), +(5,'熊大','男',19,98,77), +(6,'熊二','女',39,25,65); +SELECT * FROM xxb WHERE sc>80; +SELECT * FROM xxb WHERE yc<=80; +SELECT * FROM xxb WHERE age=20; +SELECT * FROM xxb WHERE age<>20; +SELECT * FROM xxb WHERE age>35 AND sex='男'; +SELECT * FROM xxb WHERE age>35 OR sex='男'; +SELECT * FROM xxb WHERE id=1 OR id=3 OR id=5; +SELECT * FROM xxb WHERE id NOT IN (1,3,5); +SELECT * FROM xxb WHERE yc>=75 AND yc<=90; +SELECT * FROM xxb WHERE NAME LIKE '赵%'; +SELECT * FROM xxb WHERE NAME LIKE '%岩'; +SELECT * FROM xxb WHERE NAME LIKE '赵__'; +SELECT * FROM xxb ORDER BY age DESC; +SELECT * FROM xxb ORDER BY age DESC, sc DESC; +SELECT COUNT(yc) FROM xxb; +SELECT SUM(sc) FROM xxb; +SELECT MAX(sc) FROM xxb; +select sum(sc) + sum(yc) from xxb; +/*分组 + -- 准备数据 + 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.查询每种颜色车辆的总价 + +​ -- 2.查询每种颜色车辆总价大于30车辆的颜色和总价 + +​ -- 3.注意:分组查询的结果最好是分组字段和聚合函数,不要是其他字段 + +​ -- 4.where后面不能使用聚合函数 报错的 + +​ -- 小结:where是在分组前筛选,having是在分组后筛选 +​ -- 5.查询车的单价大于15的每种颜色车辆总价大于30车辆的颜色和总价*/ + + + +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; + +-- 分页 + -- 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