diff --git "a/33.\346\235\216\345\245\211\345\275\254/20230317 \344\275\234\344\270\2322.md" "b/33.\346\235\216\345\245\211\345\275\254/20230317 \344\275\234\344\270\2322.md" new file mode 100644 index 0000000000000000000000000000000000000000..0214df3d439318ac2347cab3998294e9e7a23187 --- /dev/null +++ "b/33.\346\235\216\345\245\211\345\275\254/20230317 \344\275\234\344\270\2322.md" @@ -0,0 +1,101 @@ +```sql +CREATE DATABASE WORKd CHARSET utf8; +use WORKd; +CREATE TABLE orders( +orderID int PRIMARY key, +orderDate datetime +); +CREATE TABLE orderItem( +itemID int, +orderid int, +itemType VARCHAR(20), +itemName VARCHAR(20), +theNumber VARCHAR(20), +theMoney VARCHAR(20) +); +INSERT INTO orders VALUES +(1,'2008-01-12'), +(2,'2008-02-10'), +(3,'2008-02-15'), +(4,'2008-03-10'); +INSERT into orderItem VALUES +(1,1,'文具','笔',72,2), +(2,1,'文具','尺',10,1), +(3,1,'体育用品','篮球',1,56), +(4,2,'文具','笔',36,2), +(5,2,'文具','固体胶',20,3), +(6,2,'日常用品','透明胶',2,1), +(7,2,'体育用品','羽毛球',20,3), +(8,3,'文具','订书机',20,3), +(9,3,'文具','订书机',10,3), +(10,3,'文具','裁纸刀',5,5), +(11,4,'文具','笔',20,2), +(12,4,'文具','信纸',50,1), +(13,4,'日常用品','毛巾',4,5), +(14,4,'日常用品','透明胶',30,1), +(15,4,'体育用品','羽毛球',20,3); + + + +-- 先创建如图所示表 +-- 订单表(orders)列为:订单编号(orderId 主键) 订购日期(orderDate) +-- 订购项目表(orderItem),列为: +-- 项目编号(ItemiD)订单编号(orderId)产品类别(itemType) +-- 产品名称(itemName) 订购数量(theNumber) 订购单价(theMoney) +-- 1.查询所有订单订购的所有物品数量总和 +SELECT SUM(theNumber) FROM orderItem; +-- 2.查询订单编号小于3的,平均单价小于10 每个订单订购的所有物品的数量和以及平均单价 + +SELECT + sum(theNumber),ROUND(AVG(theMoney),2) +FROM + orderItem +WHERE + orderId<3 +and + (SELECT ROUND(AVG(theMoney),2) FROM orderItem)<10 +GROUP BY + orderId; +-- 3.查询平均单价小于10并且总数量大于 50 每个订单订购的所有物品数量和以及平均单价 +SELECT + sum(theNumber),ROUND(AVG(theMoney),2) +FROM + orderItem +WHERE + (SELECT ROUND(AVG(theMoney),2) FROM orderItem)<10 AND (SELECT SUM(theNumber) FROM orderItem)>50 +GROUP BY + orderId; + +-- 4.查询每种类别的产品分别订购了几次,例如: +-- 文具 9 +-- 体育用品 3 +-- 日常用品 3 +SELECT + itemType,COUNT(itemType) +FROM + orderItem +GROUP BY + itemType; + +-- 5.查询每种类别的产品的订购总数量在100以上的订购总数量和平均单价 +SELECT + sum(theNumber),ROUND(AVG(theMoney),2) +FROM + orderItem +WHERE + (SELECT SUM(theNumber) FROM orderItem)>100 +GROUP BY + orderId; +-- 6.查询每种产品的订购次数,订购总数量和订购的平均单价,例如: +-- 产品名称 订购次数 总数量 平均单价 +-- 笔 3 120 2 +SELECT + itemName 产品名称,COUNT(itemName) 订购次数,SUM(theNumber) 总数量,ROUND(AVG(theMoney),2) 平均单价 +FROM + orderItem +GROUP BY + itemName +ORDER BY + theNumber desc; +``` + diff --git "a/33.\346\235\216\345\245\211\345\275\254/20230317 \344\275\234\344\270\2323.md" "b/33.\346\235\216\345\245\211\345\275\254/20230317 \344\275\234\344\270\2323.md" new file mode 100644 index 0000000000000000000000000000000000000000..734ec0b70b7343f87892c5bb95daa8a9162d5c00 --- /dev/null +++ "b/33.\346\235\216\345\245\211\345\275\254/20230317 \344\275\234\344\270\2323.md" @@ -0,0 +1,78 @@ +```sql +CREATE DATABASE workd3 char set utf8; +use workd3; +CREATE TABLE stuInfo( + stuId int, + stuName VARCHAR(20), + stuAge int, + stuSex VARCHAR(10), + time datetime +); +INSERT INTO + stuInfo +VALUES + (1,'Tom',19,1,null), + (2,'Jick',20,0,null), + (3,'Rose',21,1,null), + (4,'Lulu',19,1,null), + (5,'Lili',21,0,null), + (6,'abc',20,1,'2007-01-07 01:11:36.590'); + +CREATE TABLE courseInfo( + courseID INT, + courseName VARCHAR(20), + courseMarks INT +); +INSERT INTO + courseInfo +VALUES + (1,'JavaBase',4), + (2,'HTML',2), + (3,'JavaScript',2), + (4,'SqlBase',2); + +CREATE TABLE scoreInfo( + scoreID INT, + stuID INT, + courseID INT, + score INT +); +INSERT INTO + scoreInfo +VALUES + (1,1,1,80), + (2,1,2,85), + (3,1,4,50), + (4,2,1,75), + (5,2,3,45), + (6,2,4,75), + (7,3,1,45), + (8,4,1,95), + (9,4,2,75), + (10,4,3,90), + (11,4,4,45); + +#有如图所示的三张表结构,学生信息表(stuInfo),课程信息表(courseInfo),分数信息表(scoreInfo) + +#题目: +#1.查询出每个学生所选修的课程的数量和所选修的课程的考试的平均分 +SELECT +#2.查询出每门课程的选修的学生的个数和学生考试的总分 + +#3.查询出性别一样并且年龄一样的学生的信息 + +#4.查询出学分一样的课程信息 + +#5.查询出参加了考试的学生的学号,姓名,课程号和分数 + +#6.查询出参加了考试的学生的学号,课程号,课程名,课程学分和分数 + +#7.查询出没有参加考试的学生的学号和姓名 + +#8.查询出是周六周天来报到的学生 + +#9.查询出姓名中有字母a的学生的信息 + +#10.查询出选修了2门课程以上的并且考试平均分在70以上的学生的学号和考试平均分以及选修课程的数量 +``` + diff --git "a/33.\346\235\216\345\245\211\345\275\254/20230317 \344\275\234\344\270\232\344\270\200.md" "b/33.\346\235\216\345\245\211\345\275\254/20230317 \344\275\234\344\270\232\344\270\200.md" new file mode 100644 index 0000000000000000000000000000000000000000..10f8ea2acfb12ccb07523d14c3a2db5d254555ec --- /dev/null +++ "b/33.\346\235\216\345\245\211\345\275\254/20230317 \344\275\234\344\270\232\344\270\200.md" @@ -0,0 +1,128 @@ +```sql +CREATE DATABASE works char set utf8; +use works; +CREATE TABLE stuinfo( +stuNO VARCHAR(20), +stuName VARCHAR(20), +stuAge int, +stuAddress VARCHAR(20), +stuSeat int, +stuSex int +); +INSERT INTO stuinfo VALUES +('s2501','张秋利',20,'美国硅谷',1,1), +('s2502','李斯文',18,'湖北武汉',2,0), +('s2503','马文才',18,'湖南长沙',3,1), +('s2504','欧阳俊雄',21,'湖北武汉',4,0), +('s2505','梅超风',16,'湖北武汉',5,1), +('s2506','陈旋风',19,'美国硅谷',6,1), +('s2507','陈风',20,'美国硅谷',7,0); +CREATE TABLE stuExam( +examNO INT, +stuNO VARCHAR(20), +writtenExam VARCHAR(20), +labExam VARCHAR(20) +); +INSERT INTO stuExam VALUES +(1,'s2501',50,70), +(2,'s2502',60,65), +(3,'s2503',86,70), +(4,'s2504',40,80), +(5,'s2505',70,85), +(6,'s2506',85,90); + + +-- 按图片所给的数据进行数据表的建立和数据插入,然后进行以下查询操作 +-- 1.查询学生信息表(stuinfo)中所有列信息,给每列取上中文名称 +SELECT +stuNO 学号, +stuName 姓名, +stuAge 年龄, +stuAddress 地址, +stuSeat 座号, +stuSex 性别 +FROM stuinfo; +-- 2.查询学生信息表(stuinfo)中的姓名,年龄和地址三列的信息 +SELECT +stuName 姓名, +stuAge 年龄, +stuAddress 地址 + FROM stuinfo; +-- 3.查询学生分数表(stuexam)中的学号,笔试和机试三列的信息,并为这三列取中文名字 +SELECT +stuNO 学号, +writtenExam 笔试, +labExam 机试 +FROM stuexam; +-- 5.查询学生分数表(stuexam)中的学生的学号,笔试,机试以及总分这四列的信息 +SELECT +stuNO 学号, +writtenExam 笔试, +labExam 机试, +(writtenExam+labExam) 总分 +FROM stuexam; +-- 6.查询学生信息表(stuInfo)中学生来自哪几个地方 +SELECT *,COUNT(stuAddress) FROM stuInfo GROUP BY stuAddress; +-- 7.查询学生信息表(stuInfo)中学生有哪几种年龄,并为该列取对应的中文列名 +SELECT +stuName 姓名, +stuAge 年龄, +COUNT(stuAge) +FROM stuInfo +GROUP BY stuAge; +-- 8.查询学生信息表(stuInfo)中前3行记录 +SELECT * FROM stuInfo WHERE stuSeat<4; +-- 9.查询学生信息表(stuInfo)中前4个学生的姓名和座位号 +SELECT stuName,stuSeat FROM stuInfo WHERE stuSeat<5; +-- 11.将地址是湖北武汉,年龄是20的学生的所有信息查询出来 +SELECT * FROM stuInfo WHERE stuAddress='湖北武汉'AND stuAge=20; +-- 12.将机试成绩在60-80之间的信息查询出来,并按照机试成绩降序排列 +SELECT labExam FROM stuexam WHERE labExam>60 and labExam<80 ORDER BY labExam DESC; +-- 13.查询来自湖北武汉或者湖南长沙的学生的所有信息 +SELECT * FROM stuinfo WHERE stuAddress='湖北武汉' or stuAddress='湖南长沙'; +-- 14.查询出笔试成绩不在70-90之间的信息,并按照笔试成绩升序排列 +SELECT labExam +FROM stuexam +WHERE labExam +not in(labExam<70 and labExam<90) +ORDER BY labExam; +-- 15.查询年龄没有写的学生所有信息 +SELECT * FROM stuinfo WHERE stuAge is null; +-- 16.查询年龄写了的学生所有信息 +SELECT * FROM stuinfo WHERE stuAge is not null; + +-- 17.查询姓张的学生信息 +SELECT * FROM stuinfo WHERE stuName like ('张%'); +-- 18.查询学生地址中有‘湖’字的信息 +SELECT * FROM stuinfo WHERE stuName like ('%湖%'); +-- 19.查询姓张但名为一个字的学生信息 +SELECT * FROM stuinfo WHERE stuName like ('张_'); +-- 20.查询姓名中第三个字为‘俊’的学生的信息,‘俊’后面有多少个字不限制 +SELECT * FROM stuinfo WHERE stuName like ('__俊%'); +-- 21.按学生的年龄降序显示所有学生信息 +SELECT * FROM stuinfo GROUP BY stuAge desc; +-- 22.按学生的年龄降序和座位号升序来显示所有学生的信息 +SELECT * FROM stuinfo GROUP BY stuAge desc,stuSeat asc; +SELECT * FROM stuinfo GROUP BY stuSeat asc; +-- 23显示笔试第一名的学生的考试号,学号,笔试成绩和机试成绩 +SELECT * FROM stuexam WHERE writtenExam=(SELECT MAX(writtenExam)FROM stuexam); +-- 24.显示机试倒数第一名的学生的考试号,学号,笔试成绩和机试成绩 +SELECT * FROM stuexam WHERE labExam=(SELECT MIN(labExam)FROM stuexam); +-- 25.查询每个地方的学生的平均年龄 +SELECT AVG(stuAge),stuAddress FROM stuinfo GROUP BY stuAddress; +-- 26.查询男女生的分别的年龄总和 +SELECT sum(stuAge),stuSex FROM stuinfo GROUP BY stuSex; +-- 27.查询每个地方的男女生的平均年龄和年龄的总和 +SELECT sum(stuAge),AVG(stuAge),stuAddress FROM stuinfo GROUP BY stuAddress; + + + + + + + + + + +``` + diff --git "a/33.\346\235\216\345\245\211\345\275\254/20230317 \345\244\215\344\271\240\351\242\2301.md" "b/33.\346\235\216\345\245\211\345\275\254/20230317 \345\244\215\344\271\240\351\242\2301.md" new file mode 100644 index 0000000000000000000000000000000000000000..93a7388c7fb08a25898b77e5880d125aac11f313 --- /dev/null +++ "b/33.\346\235\216\345\245\211\345\275\254/20230317 \345\244\215\344\271\240\351\242\2301.md" @@ -0,0 +1,63 @@ +```sql +CREATE DATABASE GoodsDB char set utf8; +use GoodsDB; +CREATE TABLE GoodsType( +TypeID int not null PRIMARY key auto_increment comment'商品类型编号', +TypeName varchar(20) not null comment'商品类型名称' +); +INSERT INTO + GoodsType +VALUES + (1,'服装内衣'), + (2,'鞋包配饰'), + (3,'手机数码'); + + +CREATE TABLE GoodsInfo( +GoodsID int not null PRIMARY key auto_increment comment'商品编号', +GoodsName varchar(20) not null comment'商品名称', +GoodsColor varchar(20)not null comment'商品颜色', +GoodsBrand varchar(20) comment'商品品牌', +GoodsMoney Decimal(10,2)not null comment'商品价格', +TypeID int comment'商品类型编号', +FOREIGN key(TypeID) REFERENCES GoodsType(TypeID) +); +INSERT INTO + GoodsInfo +VALUES + (1,'提花小西装','红色','菲曼琪',300,1), + (2,'百搭短裤','绿色','哥弟',100,1), + (3,'无袖背心','白色','阿依莲',700,1), + (4,'低帮休闲鞋','红色','菲曼琪',900,2), + (5,'中跟单鞋','绿色','哥弟',400,2), + (6,'平底鞋','白色','阿依莲',200,2), + (7,'迷你照相机','红色','尼康',500,3), + (8,'硬盘','黑色','希捷',600,3), + (9,'显卡','黑色','技嘉',800,3); + +-- 3、查询价格最贵的商品名称,商品颜色和商品价格,要求使用别名显示列名 +SELECT + GoodsName 商品名称,GoodsColor 商品颜色,GoodsMoney 商品价格 +FROM + GoodsInfo +WHERE + GoodsMoney=(SELECT MAX(GoodsMoney) FROM GoodsInfo); +-- 4、按商品类型编号分组查询商品最高价格,最低价格和平均价格,要求使用别名显示列名 +SELECT + TypeID 商品类型编号,MAX(GoodsMoney) 最高价格,MIN(GoodsMoney) 最低价格,AVG(GoodsMoney) 平均价格 +FROM + GoodsInfo +GROUP BY + TypeID; +-- 5、查询商品信息所有列,要求商品颜色为红色,价格在300~600之间 +SELECT + * +FROM + GoodsInfo +WHERE + GoodsColor='红色' +and + GoodsMoney +BETWEEN 300 AND 600; +``` + diff --git "a/33.\346\235\216\345\245\211\345\275\254/20230317 \345\244\215\344\271\240\351\242\2303.md" "b/33.\346\235\216\345\245\211\345\275\254/20230317 \345\244\215\344\271\240\351\242\2303.md" new file mode 100644 index 0000000000000000000000000000000000000000..b72b784f706659b9a2bc92c6e1241c30d7220908 --- /dev/null +++ "b/33.\346\235\216\345\245\211\345\275\254/20230317 \345\244\215\344\271\240\351\242\2303.md" @@ -0,0 +1,67 @@ +```sql +CREATE DATABASE StarManagerDB CHAR SET UTF8; +USE StarManagerDB; +CREATE TABLE StarType( + T_NO int NOT NULL PRIMARY KEY AUTO_increment comment'明星类型编号', + T_NAME varchaR(20) comment'明星类型' +); +INSERT INTO + StarType +VALUES + (1,'体育明星'), + (2,'IT明星'), + (3,'相声演员'); + +CREATE TABLE StarInfo( +S_NO int NOT NULL PRIMARY KEY AUTO_increment comment'明星编号', +S_NAME varchar(20) not null comment'明星姓名', +S_AGE int not null comment'明星年龄', +S_HOBBY varchar(20) comment'特技', +S_NATIVE varchar(20) DEFAULT'中国大陆' comment'明星籍贯', +S_T_NO int comment'明星类型编号', +FOREIGN key(S_T_NO) REFERENCES StarType(T_NO) +); +INSERT INTO + StarInfo +VALUES + (1,'梅西',30,'射门','阿根廷 ',1), + (2,'科比',35,'过人','美国',1), + (3,'蔡景现',40,'敲代码','中国',2), + (4,'马斯克',36,'造火箭','外星人',2), + (5,'郭德纲',50,'相声','中国',3), + (6,'黄铮',41,'拼多多','中国',2); + +-- 3、查询年龄最大的3个明星的姓名,特技和籍贯信息,要求使用别名显示列名。 +SELECT + S_NAME 姓名,S_HOBBY 特技,S_NATIVE 籍贯信息 +FROM + StarInfo +WHERE (SELECT MAX(S_AGE) FROM StarInfo) +LIMIT 3; +-- 4、按明星类型编号分类查询明星人数,明星平均年龄,显示明星人数大于2的分组信息,要求使用别名显示列名。 +SELECT + COUNT(S_NAME) 明星人数,ROUND(AVG(S_AGE),2) 明星平均年龄 +FROM + StarInfo +GROUP BY + S_T_NO +HAVING + COUNT(S_NAME)>2; +-- 5、查询明星类型为“体育明星”中年龄最大的姓名、特技、籍贯信息,要求显示列别名。 +SELECT + S_NAME 姓名,S_HOBBY 特技,S_NATIVE 籍贯信息 +FROM + StarInfo a +LEFT JOIN + StarType b +ON + a.S_T_NO=b.T_NO +WHERE + s_age=(SELECT MAX(S_AGE) FROM StarInfo a LEFT JOIN StarType b ON a.S_T_NO=b.T_NO where T_NAME='体育明星') ; + +select * from (select * from starinfo where s_T_no =(select t_no from startype where T_name ='体育明星' )) a ; + +select s_max(s_age) from starinfo group by S_T_No having s_T_no =(select t_no from startype where T_name ='体育明星' ); + +``` + diff --git "a/33.\346\235\216\345\245\211\345\275\254/20230317\345\244\215\344\271\240\351\242\2302.md" "b/33.\346\235\216\345\245\211\345\275\254/20230317\345\244\215\344\271\240\351\242\2302.md" new file mode 100644 index 0000000000000000000000000000000000000000..dd67c7ebab8499e398f5c21a4ee51c9a85aa05ea --- /dev/null +++ "b/33.\346\235\216\345\245\211\345\275\254/20230317\345\244\215\344\271\240\351\242\2302.md" @@ -0,0 +1,70 @@ +```sql +CREATE DATABASE HOUSE_DB CHAR SET UTF8; +USE HOUSE_DB; +CREATE TABLE HOUSE_TYPE( + type_id int NOT NULL PRIMARY KEY auto_increment comment'类型编号', + type_name varchar(50) not null UNIQUE key comment'类型名称' +); +INSERT INTO + HOUSE_TYPE +VALUES +(1,'小户型'), +(2,'经济型'), +(3,'别墅'); + +CREATE TABLE HOUSE( + house_id int not null PRIMARY KEY auto_increment comment'房屋编号', + house_name varchar(50) not null comment'房屋名称', + house_price float not null DEFAULT'0' comment'房租', + type_id int not null comment'房屋类型', + FOREIGN key(type_id) REFERENCES HOUSE_TYPE(type_id) +); +INSERT INTO + HOUSE +VALUES +(1,'河上人家',800,1), +(2,'江边小屋',1600,2), +(3,'碧桂园',3200,3); + +-- 3、添加表数据 +-- HOUSE_TYPE表中添加3条数据,例如:小户型、经济型、别墅 +-- HOUSE表中添加至少3条数据,不能全都为同一类型 +-- 4、添加查询 +-- 查询所有房屋信息 +SELECT + * +FROM + HOUSE; +-- 使用模糊查询包含”型“字的房屋类型信息 +SELECT + * +FROM + HOUSE_TYPE +WHERE + type_name +like'%型%'; +-- 查询出房屋的名称和租金,并且按照租金降序排序 +SELECT + house_name,house_price +FROM + HOUSE +GROUP BY + house_price desc; +-- 使用连接查询,查询信息,显示房屋名称和房屋类型名称 +SELECT + house_name,type_name +FROM + HOUSE_TYPE a +RIGHT JOIN + HOUSE b +ON + a.type_id=b.type_id; +-- 查询所有房屋中月租最高的房屋,显示最高的租金和房屋名称 +SELECT + house_name,house_price +FROM + HOUSE +WHERE + house_price=(SELECT MAX(house_price) FROM HOUSE); +``` + diff --git "a/33.\346\235\216\345\245\211\345\275\254/20230321 \344\270\212\350\257\276\347\273\203\344\271\240\351\234\200\346\261\202\347\255\224\346\241\210.md" "b/33.\346\235\216\345\245\211\345\275\254/20230321 \344\270\212\350\257\276\347\273\203\344\271\240\351\234\200\346\261\202\347\255\224\346\241\210.md" new file mode 100644 index 0000000000000000000000000000000000000000..51169b5f1a5ff1cfc0429a0489f549edd6d9fb0f --- /dev/null +++ "b/33.\346\235\216\345\245\211\345\275\254/20230321 \344\270\212\350\257\276\347\273\203\344\271\240\351\234\200\346\261\202\347\255\224\346\241\210.md" @@ -0,0 +1,320 @@ +-- 0.创建数据库练习 +-- 1.直接创建数据库db3 +CREATE DATABASE db3 char set utf8; + +-- 2.判断是否存在并创建数据库db4 +CREATE DATABASE if not EXISTS db4 char set 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 studen( +s_ID int, +s_name VARCHAR(10), +s_sex CHAR, +s_bd datetime, +cj FLOAT(10,2), +dz VARCHAR(20), +tp VARCHAR(20), +zhuangtai int +); +-- 2.更改表练习 + -- 1.修改stu表名为student + alter TABLE + studen + RENAME to + 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.创建表 + + -- 2.插入部分数据,给id name age sex赋值 +INSERT INTO student(s_id,s_name,s_sex,s_bd) VALUES(1,'张三','男','203-03-14'); + /* + 1.在mysql中插入字符数据,数据使用单引号或者双引号都可以,建议使用单引号 + 2.在mysql中插入的数据是date类型,那么将数据书写在单引号或者双引号都可以 + */ + + -- 3.插入所有的字段,不写字段名 + desc student; + INSERT INTO + student + VALUES + (2,'李四','女','204-2-3','99','地球村',38381438,8); + + -- 4.插入所有的字段,写出字段名 +INSERT INTO + student(s_id,s_name,s_sex,s_bd,cj,dz,tp,zhuangtai) +VALUES + (3,'李大傻','女','201-2-3','11','云母村',13146365,4); + + -- 5.批量插入数据 + INSERT INTO + student + VALUES + (4,'王大傻','男','206-2-3','66','地底核心村',13146352,1), + (5,'刘大傻','女','209-2-3','88','奥拉星村',13-563414,9), + (6,'大傻','男','200-2-3','77','干饭村',138635,6); + -- 插入数据注意 + -- 6.插入数据时 省略列名,那么如果不需要给列赋值那么使用null +INSERT INTO + student +VALUES + (7,null,null,null,null,null,null,null); +#4.修改数据 + -- 1.修改数据:修改性别都变为女 +UPDATE student set s_sex='女'; + + -- 2.修改数据:带条件修改id是2的学生性别变为男 +UPDATE student set s_sex='男' WHERE s_id=2; + -- 3.一次修改多个列,把id为3的学生,年龄改成26岁,address改成北京 +UPDATE student set s_bd='1997-03-21',dz='北京' WHERE s_id=3; +#5.删除数据 + -- 1.带条件删除数据,删除id是3的记录 +DELETE FROM student WHERE s_id='3'; + -- 2.带条件删除数据,删除id是1和2的记录 id in(1,2) : 表示id的值是1或者2 +DELETE FROM student WHERE s_id in(1,2); + +-- 3.不带条件删除 +-- 还可以使用:DDL +-- 这里的table可以省略 +DELETE FROM student; + +INSERT INTO student(s_id,s_name,s_sex,s_bd) VALUES(1,'张三','男','203-03-14'); +desc student; + INSERT INTO + student + VALUES + (2,'李四','女','204-2-3','99','地球村',38381438,8); +INSERT INTO + student(s_id,s_name,s_sex,s_bd,cj,dz,tp,zhuangtai) +VALUES + (3,'李大傻','女','201-2-3','11','云母村',13146365,4); +INSERT INTO + student + VALUES + (4,'王大傻','男','206-2-3','66','地底核心村',13146352,1), + (5,'刘大傻','女','209-2-3','88','奥拉星村',13-563414,9), + (6,'大傻','男','200-2-3','77','干饭村',138635,6); +#alte +#6.查询数据 +-- 1.查询多个字段 +-- * 表示所有字段 +SELECT * FROM student; + + -- 2.写出查询每列的名称 +SELECT + s_id,s_name,s_sex,s_bd,cj,dz,tp,zhuangtai +FROM + student; + -- 3.查询表中name和age列,name列的别名为姓名,age列的别名为年龄 + -- 使用as起给字段和表起别名 + SELECT + s_name as 姓名,s_bd as 年龄 + FROM + student; + -- as可以省略 +SELECT + s_name 姓名,s_bd 年龄 + FROM + student; + + -- 4.去重 + -- 对age去重 +SELECT DISTINCT s_bd FROM student; + + -- 对age和address去重 + -- 如果多个字段一起去重,如果所有的字段值全部一样才会去重 +SELECT DISTINCT s_bd,dz FROM student; + + +#7.带条件的查询 + -- 1.查询数学成绩大于80学生 +SELECT * FROM student WHERE cj>80; + + -- 2.查询英语成绩小于等于80学生 +SELECT * FROM student WHERE cj<=80; + + -- 3.查询年龄等于20的学生 +SELECT * FROM student WHERE s_bd=20; + + -- 4.查询年龄不等于20的学生 +SELECT * FROM student WHERE s_bd!=20; + + -- 5.查询年龄大于35并且性别是男的学生 +SELECT * FROM student WHERE s_bd>35 and s_sex='男'; + + -- 6.查询年龄大于35或者性别是男的学生 +SELECT * FROM student WHERE s_bd>35 or s_sex='男'; + + -- 7.查询id是1 3 5的学生 +SELECT * FROM student WHERE s_id in (1,3,5); + + + -- 8.查询id不是1 3 5的学生 + -- not in 是in的取反,表示不在什么其中 +SELECT * FROM student WHERE s_id not in (1,3,5); + + -- 范围查询 + -- 9.英语成绩在75和90之间 +SELECT * FROM student WHERE cj BETWEEN 75 and 90; + +-- 模糊查询 使用like + -- 10.查询姓赵的学生 + -- name like '赵%' 表示name的值以赵开始,后面是什么都可以 + -- %在模糊查询中表示任意个数的字符 +SELECT * FROM student WHERE s_name like '赵%'; + + -- 11.查询包含岩 + -- name like '%岩%' 表示name的值只要含有岩即可,前后%表示匹配任意多个字符 +SELECT * FROM student WHERE s_name like '%岩%'; + + -- 12.查询姓赵并且是三个字的学生 + -- _下划线在模糊查询中表示单个字符 +SELECT * FROM student WHERE s_name like '赵___'; + + -- 排序 + -- desc表示降序 + -- 13.按照年龄降序排序 +SELECT * FROM student ORDER BY s_bd desc; + + -- 14.先按照年龄降序排序,如果年龄相同在按照数学降序排序 +SELECT * FROM student ORDER BY s_bd desc,cj desc; + -- 15.先按照年龄降序排序,如果年龄相同在按照数学升序排序 +SELECT * FROM student ORDER BY s_bd desc,cj; + + -- 聚合函数 + -- 16.查询学生总数即有多少名学生 +SELECT COUNT(s_name) FROM student; + + -- 17.查询数学成绩总分数 +SELECT sum(cj) FROM student; + -- 18.查询数学成绩最高分数 +SELECT MAX(cj) FROM student; + -- 19.统计数学和英语总和值 + -- 实现一:分别统计数学和英语的每个总成绩,然后进行相加 +SELECT COUNT(suxue),COUNT(yingyu),COUNT(suxue)+COUNT(yingyu) FROM student; + + -- 实现二:分别统计每个人的数学和英语成绩,然后将每个人的数学和英语成绩相加 +SELECT suxue,yingyu,suxue+yingyu FROM student; + /* + 结果是:380 少了柳岩的90 + sum(math+english): + 问题原因: + + + +```sql + 解决上述问题:使用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),price FROM car WHERE price>15 GROUP BY color having SUM(price)>30 ; + + -- 分页 + -- 1.分页查询数据,每页显示2条数据 + -- 第一页 + -- 0 表示起始索引,对应第一行数据 + -- 2表示每页显示2条数据 + + +```sql + -- 当起始索引是0的情况下可以不写索引0,写法如下, + -- 下面的2表示每页显示的数据行数 + + -- 第二页 + -- 第一个2表示起始索引,对应三行数据 + -- 第二个2表示每页显示两条数据,对于第二个参数每个公司基本是固定的,最后一页剩下几行数据 + -- 就会显示几行数据 + + -- 第三页 + /* + 公式: 起始索引 = (当前页码-1)*每页显示的条数 + 0 1 2 + 2 2 2 + 4 3 2 + */ +``` \ No newline at end of file