diff --git "a/01\351\231\210\346\242\246\346\242\246/20230223.md" "b/01\351\231\210\346\242\246\346\242\246/20230223.md" deleted file mode 100644 index 5d87f3d2a9b46fb9f781a5460c4f48db176782df..0000000000000000000000000000000000000000 --- "a/01\351\231\210\346\242\246\346\242\246/20230223.md" +++ /dev/null @@ -1,296 +0,0 @@ -## 唯一键约束 - -### 唯一键约束的作用 - -单列唯一:用来限制某个字段/某列的值不能重复。 - -组合唯一:用来限定几个字段的值组合不能重复。 - -### 关键字:unique key - -### 特点 - -```mysql -(1)一个表可以有很多个唯一键约束, -(2)每一个唯一键约束字段都会自动创建索引。 -(3)唯一键约束允许为空 -(4)唯一键约束也可以是复合唯一 -(5)删除唯一键约束的索引来删除唯一键约束 -索引名默认是字段名,复合唯一默认是第一个字段名。 -``` - -### 如何指定唯一键约束 - -#### 建表时 - -```mysql -#在建表时,可以指定唯一键约束 -create table 表名称( - 字段名 数据类型 unique key, - 字段名 数据类型 unique key, - 字段名 数据类型 -); - -create table 表名称( - 字段名 数据类型, - 字段名 数据类型, - 字段名 数据类型, - unique key(字段名), - unique key(字段名) -); -``` - -### 复合唯一 - -```mysql -create table 表名称( - 字段名 数据类型, - 字段名 数据类型, - 字段名 数据类型, - unique key(字段列表) #字段列表中写的是多个字段名,多个字段名用逗号分隔,表示那么是复合唯一,即多个字段的组合是唯一的 -); -``` - -## 主键约束(重要) - -### 主键约束的作用 - -用来唯一的确定一条记录 - -### 关键字:primary key - -### 特点 - -(1)唯一并且非空 - -(2)一个表最多只能有一个主键约束 - -(3)如果主键是由多列组成,可以使用复合主键 - -(4)主键列会自动创建索引(能够根据主键查询的,就根据主键查询,效率更高) - -主键列的唯一并且非空是约束的概念,但是mysql会给每个表的主键列创建索引,会开辟单独的物理空间来存储每一个主键的目录表(Btree结构)。这样设计的意义,可以根据主键快速查询到某一行的记录。 - -(5)如果删除主键约束了,主键约束对应的索引就自动删除了。 - -### 唯一键约束和主键约束区别 - -```mysql -4、唯一键约束和主键约束的区别 -(1)唯一键约束一个表可以有好几个, -但是主键约束只有一个 -(2)唯一键约束本身不带非空限制,如果需要非空,需要单独定义。 -主键约束不用再定义NOT NULL,自身就带非空限制。 -``` - -### 如何指定主键约束 - -#### 建表时指定主键约束 - -```mysql -create table 表名称( - 字段名 数据类型 primary key, - 字段名 数据类型, - 字段名 数据类型 -); -create table 表名称( - 字段名 数据类型, - 字段名 数据类型, - 字段名 数据类型, - primary key(字段名) -); -``` - - - -## 默认值约束 - -### 作用 - -给某个字段/某列指定默认值,当添加时或修改时,可以使用默认值。 - -### 关键字:default - -### 如何给字段加默认值 - -#### 建表时 - -```mysql -create table 表名称( - 字段名 数据类型 primary key, - 字段名 数据类型 unique key not null, - 字段名 数据类型 unique key, - 字段名 数据类型 not null default 默认值, -); -create table 表名称( - 字段名 数据类型 default 默认值 , - 字段名 数据类型 not null default 默认值, - 字段名 数据类型 not null default 默认值,, - primary key(字段名), - unique key(字段名) -); - -说明:默认值约束一般不在唯一键和主键列上加 -``` - -## 自增属性 - -### 1、作用 - -作用:给某个字段自动赋值,这个值是一直往上增加,如果没有特意干扰的,每次自增1. - -### 2、关键字:auto_increment - -### 3、特点和要求 - -```mysql -(1)一个表只能有一个自增字段,因为一个表只有一个AUTO_INCREMENT属性记录自增字段值 -(2)并且自增字段只能是key字段,即定义了主键、唯一键等键约束的字段。 -一般都是给主键和唯一键加自增。 -(3)自增字段应该是数值类型,一般都是整数类型。 -(4)AUTO_INCREMENT属性值 必须 > 当前自增字段的最大值 -(5)如果自增列指定了 0 和 null,会在当前最大值的基础上自增, -如果自增列手动指定了具体值,直接赋值为具体值。 -``` - -### 4、如何指定自增约束 - -#### 建表时 - -```mysql -create table 表名称( - 字段名 数据类型 primary key auto_increment, - 字段名 数据类型 unique key not null, - 字段名 数据类型 unique key, - 字段名 数据类型 not null default 默认值, -); -create table 表名称( - 字段名 数据类型 default 默认值 , - 字段名 数据类型 unique key auto_increment, - 字段名 数据类型 not null default 默认值,, - primary key(字段名) -); -``` - -## 检查约束 - -### 关键字:check - -# 作业 - -```mysql --- 1、创建数据库test01_company - CREATE DATABASE test01_company; - USE test01_company; --- 2、创建表格offices --- | 字段名 | 数据类型 | --- | ---------- | ----------- | --- | officeCode | int | --- | city | varchar(30) | --- | address | varchar(50) | --- | country | varchar(50) | --- | postalCode | varchar(25) | - CREATE TABLE offices( - officeCode INT, - city VARCHAR(30), - address VARCHAR(50), - country VARCHAR(50), - postalCode VARCHAR(25) - ); --- 3、创建表格employees --- | 字段名 | 数据类型 | --- | --------- | ------------- | --- | empNum | int(11) | --- | lastName | varchar(50) | --- | firstName | varchar(50) | --- | mobile | varchar(25) | --- | code | int | --- | jobTitle | varchar(50) | --- | birth | date | --- | Note | varchar(255) | --- | Sex | varchar(5) | -CREATE TABLE employees( -empnum INT(11), -lastname VARCHAR(50), -firstname VARCHAR(50), -mobile VARCHAR(25), -`code` INT, -jobtitle VARCHAR(50), -birth date, -note VARCHAR(255), -sex VARCHAR(5) -); --- **要求4:**将表employees的mobile字段修改到code字段后面。 -ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER `code`; --- **要求5:**将表employees的birth字段改名为birthday; -ALTER TABLE employees CHANGE birth birthday date; --- **要求6:**修改sex字段,数据类型为char(1)。 -ALTER TABLE employees MODIFY sex char(1); --- **要求7:**删除字段note; -ALTER TABLE employees DROP note; --- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); -ALTER TABLE employees ADD favoriate_activity VARCHAR(100); --- **要求9:**将表employees的名称修改为 employees_info -ALTER TABLE employees RENAME TO employees_info; -``` - - - -```mysql --- ## 第2题 --- 1、创建数据库test02db -CREATE DATABASE if NOT EXISTS test02db; -USE test02db; --- 2、创建表格pet --- | 字段名 | 字段说明 | 数据类型 | --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | -CREATE TABLE IF NOT EXISTS pet( -`name` VARCHAR(20) COMMENT'宠物名称', -`owner` VARCHAR(20) COMMENT'宠物主人', -`spcies` VARCHAR(20) COMMENT'种类', -`sex` char(1) COMMENT'性别', -`birth` YEAR COMMENT '出生日期', -`death` YEAR COMMENT '死亡日期' -); --- 3、添加记录 -INSERT INTO pet (`name`,`owner`,spcies,sex,birth,death) VALUES -('fluffy','harold','cat','f','2003','2010'), -('claws','gwen','cat','m','2004',null), -('buffy','null','god','f','2009',null), -('fang','benny','dog','m','2000',null), -('bowser','diane','dog','m','2003','2009'), -('chirpy',null,'bird','f','2008',null); --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | --- --- 4、 添加字段主人的生日owner_birth。 -ALTER TABLE pet ADD owner_birth VARCHAR(15); -alter table pet drop owner_birth; -desc pet; --- 5、 将名称为Claws的猫的主人改为kevin -UPDATE pet SET owner='kevin' WHERE owner='claws'; - --- 6、 将没有死的狗的主人改为duck -UPDATE pet SET owner='duck' WHERE death is NULL; --- 7、 查询没有主人的宠物的名字; -SELECT name FROM pet WHERE OWNER is NULL; --- 8、 查询已经死了的cat的姓名,主人,以及去世时间; -SELECT name,owner,death from pet WHERE death is NOT null AND spcies='cat'; --- 9、 删除已经死亡的狗 -DELETE FROM pet where death is NOT NULL AND spcies='dog'; --- 10、查询所有宠物信息 -SELECT * FROM pet; -``` - diff --git "a/01\351\231\210\346\242\246\346\242\246/2023MySQL\345\237\272\347\241\200.md" "b/01\351\231\210\346\242\246\346\242\246/2023MySQL\345\237\272\347\241\200.md" deleted file mode 100644 index 4fb3c461d072548095aaaab7547363822fd0a79e..0000000000000000000000000000000000000000 --- "a/01\351\231\210\346\242\246\346\242\246/2023MySQL\345\237\272\347\241\200.md" +++ /dev/null @@ -1,188 +0,0 @@ -# 1库。 - -## 数据库操作 - -1.创建库 - -~~~mysql -create database 【if not exists (若不存在则创建,存在则跳过)】 数据库名称; -~~~ - -2.查看库 - -~~~mysql -show databases; -#查看库,当要查看另外一个库里的表格 -#show tables from 表格名称; -~~~ - - - -3.查看创建文件某个数据库的sql语句(就是看一下他是怎么定义的) - -~~~mysql -show create database 数据库名称; -~~~ - -4.使用库 - -~~~mysql -use 数据库名称; -~~~ - -5.修改库(不能修改名称。只能修改编码个校对规则) - -~~~mysql -alter database 数据库名称 charcater set 新的编码 collate 新校对规则; -~~~ - -6.删除库 - -~~~mysql -drop database 【if exists (若存在则删除,不在则跳过)】数据库名称; -~~~ - - - -# 2.表 - -#### 表和字段不能单独存放,他们必须一起出现 - -~~~mysql -#使用库(建表之前一定要先用库) -#1.创建表 -create table 表名( -字段1 数据类型, -字段2 数据类型, -字段3 数据类型 -......最后一个字段结尾不用, -); -#2.查看当前数据库的某个表的结构 -desc 表名; -例如:desc fans; -#3.查看某个数据库的某个表格的结构 -desc 数据库 表名; -例如:decs mxdx.student; -#4.修改表 -修改名 -例如:alter table fans rename to fensi; -#5删表 -drop tbale if exists stu; - -~~~ - -#### 222修改表 - -~~~mysql -修改表的字符集和校对规则 -alter table 表名称 charset=新字符 collate=新校对规则; -增加一个字段 -ALTER RABLE 表名称 add [column] 字段名 数据类型; -删除一个字段 -alter tbale 表名称 drop colimun 字段名; -修改一个字段名称 -alter tbale 表名称 change 旧字段名称 新的字段名称 数据类型; -修改一个字段的数据类型 -alter table 表名称 modify 字段名称 新数据类型; -修改字段的位置和顺序 -alter table 表名称 modify 字段名称 数据类型 after 另一个字段;(移到xxx后这个位置) -alter tbale 表名称 mofidy 字段名称 数据类型 first; -~~~ - -### 作业 - -~~~mysql -#1、创建数据库test01_market -create database if not EXISTS test01_market default charset utf8; -use test01_market; -#2、创建表格customers -create table customers( - c_num int(11), - c_name varchar(50), - c_contact varchar(50), - c_city varchar(50), - c_birth date -); - -#| 字段名 | 数据类型 | -#| --------- | ----------- | -#| c_num | int(11) | -#| c_name | varchar(50) | -#| c_contact | varchar(50) | -#| c_city | varchar(50) | -#| c_birth | date | - -#**要求3:**将c_contact字段移动到c_birth字段后面 -alter table customers MODIFY c_contact varchar(50) after c_birth; - -#**要求4:**将c_name字段数据类型改为 varchar(70) -alter table customers modify c_name varchar(70); - -#**要求5:**将c_contact字段改名为c_phone -alter table customers change c_contact c_phone; - -#**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -alter table customers add c_gender char(1) after c_name; - -#**要求7:**将表名改为customers_info -alter table customers rename to customers_info; - -#**要求8:**删除字段c_city -alter table customers_info drop c_city; -~~~ - -~~~mysql -#1、创建数据库test02_library -create database if not exists test02_library default charset utf8; -use test02_library; -#2、创建表格books -create table books( - b_id int(11) comment'书编号', - b_name varchar(50) comment'书名', - authors varchar(100) comment'作者', - price float comment'价格', - pubdate year comment'出版日期', - note varchar(100)comment'说明', - num int(11) comment'库存' -); - -#| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -#| ------- | -------- | ------------- | -------- | ---- | -#| b_id | 书编号 | int(11) | 否 | 是 | -#| b_name | 书名 | varchar(50) | 否 | 否 | -#| authors | 作者 | varchar(100) | 否 | 否 | -#| price | 价格 | float | 否 | 否 | -#| pubdate | 出版日期 | year | 否 | 否 | -#| note | 说明 | varchar(100) | 是 | 否 | -#| num | 库存 | int(11) | 否 | 否 | - -#3、向books表中插入记录 -insert into books (b_id,b_name,authors,price,pubdate,note,num) values (1,'Tal of AAA','Dickes',23,1995,'novel',11); - -#1) 指定所有字段名称插入第一条记录 -insert into books values (2,'EmmaT','Jane lura',35,1993,'joke',22); - -#2)不指定字段名称插入第二记录 -insert into books values (3,'Story of Jane','Jane Tim',40,2001,'nove',10), - -#3)同时插入多条记录(剩下的所有记录) -insert into books values (4,'Lovey DayGeorge','Byron',20,2005,'novel',30),(5,'Old land','Honore Blade',30,2010,'law',0),(5,'Old land','Honore Blade',30,2010,'law',0),(7,'Rose Hood','Richard haggard',28,2008,'cartoon',28); - -#| b_id | b_name | authors | price | pubdate | note | num | -#| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -#| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -#| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -#| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -#| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -#| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -#| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -#| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -#4、将小说类型(novel)的书的价格都增加5。 -update books set price=price+5 where note='novel'; -#5、将名称为EmmaT的书的价格改为40。 -update books set price=40 where b_name='EmmaT'; -#6、删除库存为0的记录 -delete from books where num=0; -~~~ - diff --git "a/01\351\231\210\346\242\246\346\242\246/5\343\200\201SELECT\350\257\255\345\217\245\345\237\272\347\241\200\347\273\203\344\271\240.md" "b/01\351\231\210\346\242\246\346\242\246/5\343\200\201SELECT\350\257\255\345\217\245\345\237\272\347\241\200\347\273\203\344\271\240.md" deleted file mode 100644 index b24f3cad6c2beaed6480ecae5a3df5415f8b395b..0000000000000000000000000000000000000000 --- "a/01\351\231\210\346\242\246\346\242\246/5\343\200\201SELECT\350\257\255\345\217\245\345\237\272\347\241\200\347\273\203\344\271\240.md" +++ /dev/null @@ -1,152 +0,0 @@ -# 第1组:user_profile表 - -user_profile表的sql脚本: - -```mysql -drop table if exists user_profile; -CREATE TABLE `user_profile` ( -`id` int, -`device_id` int, -`gender` varchar(14), -`age` int , -`university` varchar(32), -`province` varchar(32)); - - -INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing'); -INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai'); -INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing'); -INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang'); -INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong'); -``` - -```mysql -CREATE DATABASE bg charset utf8; -USE bg; -drop table if exists user_1; -CREATE TABLE user_1( -`id` int, -`device_id` int(4), -`gender` varchar(14), -`age` int(2) , -`university` varchar(32), -`province` varchar(32)); -); -INSERT INTO user_1 VALUES(1,2138,'male',21,'北京大学','BeiJing'); -INSERT INTO user_1 VALUES(2,3214,'male',null,'复旦大学','Shanghai'); -INSERT INTO user_1 VALUES(3,6543,'female',20,'北京大学','BeiJing'); -INSERT INTO user_1 VALUES(4,2315,'female',23,'浙江大学','ZheJiang'); -INSERT INTO user_1 VALUES(5,5432,'male',25,'山东大学','Shandong'); -DESC user_1; -``` - - - -![](5、SELECT语句基础练习.assets/image-20220207141745581 - 副本.png) - -解释:id(编号)、device_id(设备ID),gender(性别),age(年龄)、university(大学名称),province(省份) - -## (1)题目:从用户信息表中取出学校的去重数据 - -现在运营需要查看用户来自于哪些学校,请从用户信息表中取出学校的去重数据。 - -![image-20220207141745581](5、SELECT语句基础练习.assets/image-20220207141745581.png) - -```mysql -SELECT distinct university FROM user_1; -``` - - - -## (2)题目:查看用户明细设备ID数据,并将列名显示为 'user_infos_example' - -现在你需要查看用户明细设备ID数据,并将列名显示为 'user_infos_example',请你从用户信息表取出相应结果。 - -![image-20220207143458749](5、SELECT语句基础练习.assets/image-20220207143458749.png) - -```mysql -SELECT device_id user_infos_example FROM user_1; -``` - -## (3)题目:查询university是北京大学的设备ID - -现在运营想要筛选出所有北京大学的学生进行用户调研,请你从用户信息表中取出满足条件的数据,结果返回设备id和学校。 - -![image-20220207144253185](5、SELECT语句基础练习.assets/image-20220207144253185.png) - -```mysql -SELECT device_id,university FROM user_1 WHERE university='北京大学'; -``` - - - -## (4)题目:查询年龄大于24用户的设备ID、性别、年龄、学校 - -现在运营想要针对24岁以上的用户开展分析,请你取出满足条件的设备ID、性别、年龄、学校。 - -![image-20220207144628582](5、SELECT语句基础练习.assets/image-20220207144628582.png) - -```mysql -SELECT device_id,gender,age,university FROM user_1 WHERE age>24; -``` - - - -## (5)题目:查询所有用户的设备id、性别、年龄、学校 - -现在运营同学想要用户的设备id对应的性别、年龄和学校的数据,请你取出相应数据 - -![image-20220207172816753](5、SELECT语句基础练习.assets/image-20220207172816753.png) - -```mysql -SELECT device_id,gender,age,university FROM user_1 WHERE age='25'; -``` - - - -## (6)题目:查询所有用户的数据 - -现在运营想要查看用户信息表中所有的数据,请你取出相应结果 - -![image-20220207172840781](5、SELECT语句基础练习.assets/image-20220207172840781.png) - -```mysql -SELECT * FROM user_1; -``` - -## (7)题目:查询省份是"shanghai"的用户信息 - -现在运营想要查看上海市用户的信息,请你取出相应的结果。 - -根据示例,你的查询应返回以下结果: - -![image-20220210171353387](5、SELECT语句基础练习.assets/image-20220210171353387.png) - -```mysql -SELECT * FROM user_1 WHERE province='Shanghai'; -``` - -## (8)题目:查询所有男性用户的设备ID、年龄、学校 - -现在运营想要查看所有男性用户的设备ID、年龄、学校,便于后期做数据分析。 - -根据示例,你的查询应返回如下结果: - -![image-20220210171628263](5、SELECT语句基础练习.assets/image-20220210171628263.png) - -```mysql -SELECT device_id,age,university FROM user_1 WHERE gender='male'; -``` - -## (9)题目:从用户信息表中取出省份的去重数据 - -现在运营想要查看所有用户的省份分布情况,请从用户信息表中取出省份的去重数据。 - -根据示例,你的查询应返回如下结果: - -![image-20220210171835938](5、SELECT语句基础练习.assets/image-20220210171835938.png) - -```mysql -SELECT DISTINCT province FROM user_1; -``` - diff --git "a/01\351\231\210\346\242\246\346\242\246/6\343\200\201\350\277\220\347\256\227\347\254\246\347\273\203\344\271\240.md" "b/01\351\231\210\346\242\246\346\242\246/6\343\200\201\350\277\220\347\256\227\347\254\246\347\273\203\344\271\240.md" deleted file mode 100644 index 216020256dddea0408eb6c7870b7aef9335e725f..0000000000000000000000000000000000000000 --- "a/01\351\231\210\346\242\246\346\242\246/6\343\200\201\350\277\220\347\256\227\347\254\246\347\273\203\344\271\240.md" +++ /dev/null @@ -1,176 +0,0 @@ -# 第1题:user_profile表脚本1 - -user_profile表的sql脚本: - -```mysql -CREATE DATABASE if NOT EXISTS user_profile charset utf8; -USE user_profile; -drop table if exists user_profile; -CREATE TABLE `user_profile` ( -`id` int, -`device_id` int, -`gender` varchar(14), -`age` int , -`university` varchar(32), -`province` varchar(32)); - -INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing'); -INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai'); -INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing'); -INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang'); -INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong'); -``` - -![](6、运算符练习.assets/image-20220207141745581 - 副本.png) - -解释:id(编号)、device_id(设备ID),gender(性别),age(年龄)、university(大学名称),province(省份) - -## (1)题目:查询年龄20岁及以上且23岁及以下用户的设备ID、性别、年龄 - -现在运营想要针对20岁及以上且23岁及以下的用户开展分析,请你取出满足条件的设备ID、性别、年龄。 - -![image-20220207144855013](6、运算符练习.assets/image-20220207144855013.png) - -```mysql -SELECT device_id,gender, age FROM user_profile where age<=23 AND age>=20; -``` - - - -## (2)题目:查询除复旦大学以外的所有用户的设备ID、性别、年龄、大学 - -现在运营想要查看除复旦大学以外的所有用户明细,请你取出相应数据 - -![image-20220207144942510](6、运算符练习.assets/image-20220207144942510.png) - -```mysql -SELECT device_id,gender, age,university from user_profile WHERE !(university='复旦大学'); -``` - - - -## (3)题目:查询年龄不为空的用户的设备ID,性别,年龄,学校的信息 - -现在运营想要对用户的年龄分布开展分析,在分析时想要剔除没有获取到年龄的用户,请你取出所有年龄值不为空的用户的设备ID,性别,年龄,学校的信息。 - -![image-20220207145017152](6、运算符练习.assets/image-20220207145017152.png) - -```mysql -SELECT device_id,gender, age,university FROM user_profile WHERE age IS NOT NULL; -``` - -```mysql -CREATE DATABASE if NOT EXISTS user_profile charset utf8; -USE user_profile; -drop table if exists user_profile; -CREATE TABLE `user_profile` ( -`id` int, -`device_id` int, -`gender` varchar(14), -`age` int , -`university` varchar(32), -`province` varchar(32)); - -INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing'); -INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai'); -INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing'); -INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang'); -INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong'); -SELECT device_id,gender, age FROM user_profile where age<=23 AND age>=20; -SELECT device_id,gender, age,university from user_profile WHERE !(university='复旦大学'); -SELECT device_id,gender, age,university FROM user_profile WHERE age IS NOT NULL; -``` - - - -# 第2题:user_profile表脚本2 - -user_profile表sql脚本 - -```mysql -drop table if exists user_profile; -CREATE TABLE `user_profile` ( -`id` int , -`device_id` int, -`gender` varchar(14), -`age` int , -`university` varchar(32), -`gpa` float, -`active_days_within_30` float, -`question_cnt` float, -`answer_cnt` float -); - -INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4,7,2,12); -INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学',4.0,15,5,25); -INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学',3.2,12,3,30); -INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学',3.6,5,1,2); -INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8,20,15,70); -INSERT INTO user_profile VALUES(6,2131,'male',28,'北京师范大学',3.3,15,7,13); -``` - -![image-20220207145932876](6、运算符练习.assets/image-20220207145932876.png) - -解释:id(编号)、device_id(设备ID),gender(性别),age(年龄)、university(大学名称),province(省份),gpa(平均成绩)、active_days_within_30(30天内活跃天数)、question_cnt(发帖数量)、answer_cnt(回答数量) - -例如:第一行表示:id为1的用户的常用信息为使用的设备id为2138,性别为男,年龄21岁,北京大学,gpa为3.4,在过去的30天里面活跃了7天,发帖数量为2,回答数量为12 - -## (4)题目:查询男性且GPA在3.5以上(不包括3.5)的用户的设备ID,性别、年龄、学校、gpa - -现在运营想要找到男性且GPA在3.5以上(不包括3.5)的用户进行调研,请你取出相关数据。 - -![image-20220207145044808](6、运算符练习.assets/image-20220207145044808.png) - -```mysql -SELECT device_id,gender,age, university,gpa FROM user_profile WHERE gpa>3.5; - -``` - - - -## (5)题目:查询学校为北大或GPA在3.7以上(不包括3.7)的用户的设备ID,性别、年龄、学校、gpa - -现在运营想要找到学校为北大或GPA在3.7以上(不包括3.7)的用户进行调研,请你取出相关数据(使用OR实现) - -![image-20220207145119374](6、运算符练习.assets/image-20220207145119374.png) - -```mysql -SELECT device_id,gender,age, university,gpa FROM user_profile WHERE university='北京大学' OR gpa<3.7; -``` - - - -## (6)题目:查询学校为北大、复旦和山大用户的设备ID,性别、年龄、学校、gpa - -现在运营想要找到学校为北大、复旦和山大的同学进行调研,请你取出相关数据。 - -![image-20220207145152255](6、运算符练习.assets/image-20220207145152255.png) - -```mysql - -``` - - - -## (7)题目:查询gpa在3.5以上(不包括3.5)的山东大学用户 或 gpa在3.8以上(不包括3.8)的复旦大学同学 - -现在运营想要找到gpa在3.5以上(不包括3.5)的山东大学用户 或 gpa在3.8以上(不包括3.8)的复旦大学同学进行用户调研,请你取出相应数据。 - -![image-20220207145321717](6、运算符练习.assets/image-20220207145321717.png) - -```mysql - -``` - - - -## (8)题目:所有大学中带有北京的用户信息 - -现在运营想查看所有大学中带有北京的用户的信息,请你取出相应数据。 - -![image-20220207145355354](6、运算符练习.assets/image-20220207145355354.png) - -```mysql - -``` - diff --git "a/01\351\231\210\346\242\246\346\242\246/\344\275\234\344\270\232.sql" "b/01\351\231\210\346\242\246\346\242\246/\344\275\234\344\270\232.sql" deleted file mode 100644 index 005afbaad79cd9d93415e09e2f8abe4d0b886464..0000000000000000000000000000000000000000 --- "a/01\351\231\210\346\242\246\346\242\246/\344\275\234\344\270\232.sql" +++ /dev/null @@ -1,56 +0,0 @@ -drop database class; -create database class charset utf8; -use class; -create table stuinfo( - stuNo varchar(10), - stuName varchar(10), - stuSex enum('男','女'), - stuAge int, - stuAddress varchar(10), - stuSeat int -); -create table stuExam( - examNo int, - stuNO varchar(10), - writtenExam int, - labExam int -); -create table stuMarks( - examNo int, - stuID varchar(10), - score int -); -insert into stuinfo values ('s2501','张秋利','男',20,'美国硅谷',1),('s2502','李斯文','女',18,'湖北武汉',2),('s2503','马文才','男',18,'湖南长沙',3),('s2504','欧阳俊雄','女',21,'湖北武汉',4),('s2505','梅超风','男',16,'湖北武汉',5),('s2506','陈旋风','男',19,'美国硅谷',6); -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); -insert into stuMarks values (1,'s2501',88),(2,'s2501',92),(3,'s2501',53),(4,'s2502',60),(5,'s2502',99),(6,'s2503',82); -#1.查询出年龄比班上平均年龄大的学生的信息 -select * from stuinfo where stuAge>(select avg(stuAge) from stuinfo); -#2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -select stuNO,stuName,stuSex,(select max(score) from stuMarks where stuID=a.stuNO) from stuinfo a; -#.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -select stuinfo.stuNO,stuName,stuSex,abb from stuinfo LEFT JOIN(select (writtenExam+labExam)/2 as abb,stuNO from stuExam) a on stuinfo.stuNO=a.stuNO; -#4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -select * from stuinfo where stuSex='男' and stuAge>=20; -select * from (select * from stuinfo where stuSex='男' and stuAge>=20) as biao; -#5.查询出年龄比所有男生年龄都大的女生的信息 -select * from stuinfo where stuAge > (select max(stuAge) from stuinfo where stuSex='男'); -#6.查询出所有选修课程都及格的学生的信息 (stuMarks) -select * from stuinfo a where stuNO in (select stuID from stuMarks where score in (select min(score) from stuMarks GROUP BY stuID ) and score>=60); -#7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select * from stuinfo where stuNO in (select stuID from stuMarks); -select stuinfo.* from stuinfo right join stuMarks on stuID = stuNO where stuID = stuNO GROUP BY stuNO; -#8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select * from stuinfo where stuNO not in (select stuID from stuMarks); -select stuinfo.* from stuinfo left join stuMarks on stuID = stuNO where stuNO not in (select stuID from stuMarks) GROUP BY stuNO; -#9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -select stuinfo.* from stuinfo,stuMarks where stuID = stuNO and score>=90; -#10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -select stuinfo.* from stuinfo,stuMarks where score in (select avg(score) from stuMarks GROUP BY stuID) and stuID=stuNO; -#11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) -select stuinfo.* from stuinfo left join(select min(score) b,stuID from stuMarks GROUP BY stuID) a on stuinfo.stuNO=a.stuID where b> any (select max(score) from stuMarks where stuID='s2501'); -#12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) -select stuinfo.* from stuinfo left join(select max(score) b,stuID from stuMarks where stuID!='s2501' GROUP BY stuID) a on stuinfo.stuNO=a.stuID where b> any (select min(score) from stuMarks where stuID='s2501'); -#13.查询班上比所有男生年龄都要大的女生的信息 -select * from stuinfo where stuAge>(select max(stuAge) from stuinfo where stuSex='男' ) and stuSex='女'; -#14.查询出只要比某个男生年龄大的女生的信息 -select * from stuinfo where stuAge>(select min(stuAge) from stuinfo where stuSex='男' ) and stuSex='女'; \ No newline at end of file diff --git "a/01\351\231\210\346\242\246\346\242\246/\344\275\234\344\270\2322023 0302.md" "b/01\351\231\210\346\242\246\346\242\246/\344\275\234\344\270\2322023 0302.md" deleted file mode 100644 index 146a6905b68702b23110c0fadf1c6b377310ca26..0000000000000000000000000000000000000000 --- "a/01\351\231\210\346\242\246\346\242\246/\344\275\234\344\270\2322023 0302.md" +++ /dev/null @@ -1,60 +0,0 @@ -```mysql -drop database class2; -create database class2 charset utf8; -use class2; -create table Student( - `Sno` varchar(20) not null, - Sname varchar(20) not null, - Ssex varchar(20) not null, - Sbirthday datetime, - Class varchar(20) -); -create table Course( - Cno varchar(20) not null, - Cname varchar(20) not null, - Tno varchar(20) not null -); -create table Score( - Sno varchar(20) not null, - Cno varchar(20) not null, - Degree Decimal(4,1) -); -create table Teacher( - Tno varchar(20) not null, - Tname varchar(20) not null, - Tsex varchar(20) not null, - Tbirthday datetime, - Prof varchar(20), - Depart varchar(20) not null -); -insert into Student values ('108','曾华','男','1977-9-1','95033'),('105','匡明','男','1975-10-2','95031'),('107','王丽','女','1976-1-23','95033'),('101','李军','男','1976-2-20','95033'),('109','王芳','女','1975-2-10','95031'),('103','陆君','男','1974-6-3','95031'); -insert into Course values ('3-105','计算机导论','825'),('3-245','操作系统','804'),('6-166','数字电路','856'),('9-888','高等数学','831'); -insert into Score values ('103','3-245',86),('105','3-245',75),('109','3-245',68),('103','3-105',92),('105','3-105',88),('109','3-105',76),('101','3-105',64),('107','3-105',91),('108','3-105',78),('101','6-166',85),('107','6-166',79),('108','6-166',81); -insert into Teacher values ('804','李诚','男','1958-12-2','副教授','计算机系'),('856','张旭','男','1969-3-12','讲师','电子工程系'),('825','王萍','女','1972-5-5','助教','计算机系'),('831','刘冰','女','1977-8-14','助教','电子工程系'); -select Student.Sno,Sname,Ssex,Sbirthday,class,Cname from Student,Course,Score where Student.Sno = Score.Sno and Course.Cno = Score.Cno; -select Teacher.* from Teacher where Tname not in (select distinct Tname from Teacher,Course,Score where Teacher.Tno=Course.Tno and Course.Cno=Score.Cno); -select Sno,Cno from Score where Degree=(select Max(Degree) from Score); -select Sname,Cno,Degree from Student,Score where Student.Sno=Score.Sno; -select Student.Sno,Cname,Degree from Student,Score,Course where Student.Sno=Score.Sno and Score.Cno=Course.Cno; -select Sname,Cname,Degree from Student,Score,Course where Student.Sno=Score.Sno and Score.Cno=Course.Cno; -select AVG(Degree) from Student,Score where Student.Sno=Score.Sno and class=95033; -select Student.* from Student,Score where Student.Sno=Score.Sno and Cno='3-105' and Degree>(select Degree from Score where Sno=109 and Cno='3-105'); -select * from Score cmm where Degree <(select MAX(Degree) from Score ct where cmm.Cno=ct.Cno) and Sno in(select Sno from Score group by Sno having count(*)>1); -select * from Student,Score where Student.Sno=Score.Sno and Score.Degree>(select Degree from Score where Cno='3-105' and Sno='109'); -select Sno,Sname,Sbirthday from Student where year(Sbirthday)=(select year(Sbirthday) from Student where Sno=108); -select Sname,Degree from Student,Score,Teacher,Course where Score.cno=Course.Cno and Course.Tno=Teacher.Tno and Teacher.Tname='张旭' and Student.Sno = Score.Sno; -select distinct Tname from Course,Score,Teacher where Course.Tno=Teacher.Tno and Course.Cno=(Select cno from score group by cno having count(*)>5); -select * from Score where Cno in(select Cno from Course where Tno in(select Tno from Teacher where Depart='计算机系')); -select Tname,Prof from Teacher where Depart='电子工程系' and Prof not in(select Prof from Teacher where Depart='计算机系') or Depart='计算机系' and Prof not in(select Prof from Teacher where Depart='电子工程系'); -select Cno,Sno,Degree from Score where Cno='3-105' and Degree >any(select Degree from Score where Cno='3-245') order by Degree desc; -select Cno,Sno,Degree from Score a where (select Degree from Score b where Cno='3-105' and b.Sno=a.Sno)>(select Degree from Score c where Cno='3-245' and c.Sno=a.Sno); -select * from Score a where Degree <(select avg(Degree) from Score b where a.Cno=b.Cno); -select Tname,Depart from Teacher where Tno in (select Tno from Course); -select Tname,Depart from Teacher where Tname not in (select distinct Tname from Teacher,Course,Score where Teacher.Tno=Course.Tno and Course.Cno=Score.Cno); -select Tname,Cname from Teacher,Course where Tsex='男' and Teacher.Tno=Course.Tno; -select Sno,Cno,Degree from Score where Degree=(select MAX(Degree)from Score); -select Sname from Student where Ssex=(select Ssex from Student where Sname='李军') and Sname not in ('李军'); -select Sname from Student where Ssex=(select Ssex from Student where Sname='李军') and Sname not in ('李军') and Class=(select Class from Student where Sname='李军'); -select * from Score where Sno in (select Sno from Student where Ssex='男') and Cno in (select Cno from Course where Cname='计算机导论'); -``` - diff --git "a/02 \351\231\210\346\230\216\345\207\275/20230203mysql.md" "b/02 \351\231\210\346\230\216\345\207\275/20230203mysql.md" deleted file mode 100644 index 16e62f33e6d34a42b6d657baf11fd0143926f1ea..0000000000000000000000000000000000000000 --- "a/02 \351\231\210\346\230\216\345\207\275/20230203mysql.md" +++ /dev/null @@ -1,186 +0,0 @@ -## mysql - -````mysql -## 第1题 --- 1、创建数据库test01_company -create database test01_company -use test01_company --- 2、创建表格offices -| 字段名 | 数据类型 | -| ---------- | ----------- | -| officeCode | int | -| city | varchar(30) | -| address | varchar(50) | -| country | varchar(50) | -| postalCode | varchar(25) | -create table offices( -officecode INT, -city varchar(30), -address varchar(50), -country varchar(50), -postalcode varchar(25) -); -use test01_company --- 3、创建表格employees -| 字段名 | 数据类型 | -| ------------- | ---------------------------- | -| empNum | int(11) | -| lastName | varchar(50) | -| firstName | varchar(50) | -| mobile | varchar(25) | -| code | int | -| jobTitle | varchar(50) | -| birth | date | -| Note | varchar(255) | -| Sex | varchar(5) | -create table employees( -empnum int, -lasename varchar(50), -firstname varchar(50), -mobile varchar(25), -`code` INT, -jobtitle varchar(50), -birth date, -note varchar(255), -sex varchar(5) -); --- **要求4:**将表employees的mobile字段修改到code字段后面。 -alter table employees modify mobile varchar(25) after code; --- **要求5:**将表employees的birth字段改名为birthday; -alter table employees change birth birthday date; --- **要求6:**修改sex字段,数据类型为char(1)。 -alter table employees modify sex char(1);\ --- **要求7:**删除字段note; -alter table employees drop note; --- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); -alter table employees add favoriate_activity varchar(100); --- **要求9:**将表employees的名称修改为 employees_info -alter table employees rename to employees_info -## 第2题 --- 1、创建数据库test02db -create database test02db; -use test02db; --- 2、创建表格pet -create table pet( -`name` varchar(20), -`owner` varchar(20), -species varchar(20), -sex char(1), -birth year, -death year -); --- | 字段名 | 字段说明 | 数据类型 | --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | -desc pet; --- 3、添加记录 -insert into pet values -('Fluffy','harold','Cat','f',2003,2010), -('Claws','gwen','Cat','m',2004,null), -('Buffy',null,'Dog','f',2009,null), -('Fang','benny','Dog','m',2000,null), -('bowser','diane','Dog','m',2003,2009), -('Chirpy',null,'Bird','f',2008,null); --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | --- 4、 添加字段主人的生日owner_birth。 -alter table pet add owner_birth year after `owner`; --- 5、 将名称为Claws的猫的主人改为kevin -update pet set `owner`='kevin' where `name`='claws'; --- 6、 将没有死的狗的主人改为duck -update pet set `owner`='duck' where death is null and species='dog'; --- 7、 查询没有主人的宠物的名字; -select `name` from pet where owner is null; --- 8、 查询已经死了的cat的姓名,主人,以及去世时间; -select `name`,`owner`,death from pet where species='cat' and death is not null; --- 9、 删除已经死亡的狗 -delete from pet where species='dog' and death is not null; --- 10、查询所有宠物信息 -select * from pet; - -## 第3题 -## 第3题 - -1、创建数据库:test03_company - -```sql -create database test03_company charset utf8; -``` - -2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - -A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - -```mysql -use test03_company ; -create table department( - depid int primary key auto_increment, - depname char(10) not null unique key, - deinfo varchar(200) -) -``` - -B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - -* ​ 雇员编号为主键; -* ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); -* ​ 性别默认为男; - -```mysql -create table employee ( - empid int primary key auto_increment, - name varchar(10) not null, - sex enum('男','女') not null default '男', - title varchar(10), - birthday date, - depid int foreign key references department(depid) -) -``` - -C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - -3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) - -4、添加数据如下: - -部门表: - -| 部门编号 | 部门名称 | 部门简介 | -| -------- | -------- | ------------ | -| 111 | 生产部 | Null | -| 222 | 销售部 | Null | -| 333 | 人事部 | 人力资源管理 | - - 雇员表: - -| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | -| -------- | ---- | ---- | ---------- | ---------- | ------------ | -| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | -| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | -| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | -| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | - - 工资表: - -| 雇员编号 | 基本工资 | 职务工资 | 扣除 | -| -------- | -------- | -------- | ---- | -| 1001 | 2200 | 1100 | 200 | -| 1002 | 1200 | 200 | NULL | -| 1003 | 2900 | 700 | 200 | -| 1004 | 1950 | 700 | 150 | - -```` - - - diff --git "a/02 \351\231\210\346\230\216\345\207\275/20230220 mysql\346\225\260\346\215\256\350\241\250.md" "b/02 \351\231\210\346\230\216\345\207\275/20230220 mysql\346\225\260\346\215\256\350\241\250.md" deleted file mode 100644 index 39605329016a9b996a75bcdf57a844a890952412..0000000000000000000000000000000000000000 --- "a/02 \351\231\210\346\230\216\345\207\275/20230220 mysql\346\225\260\346\215\256\350\241\250.md" +++ /dev/null @@ -1,34 +0,0 @@ -```mysql --- 1、创建数据库test01_market -CREATE DATABASE test01_market; --- 2、创建表格customers -CREATE TABLE customers( -c_num INT(11), -c_name VARCHAR(50) -c_contact VARCHAR(50), -c_city VARCHAR(50), -c_birth date -); --- | 字段名 | 数据类型 | --- | --------- | ----------- | --- | c_num | int(11) | --- | c_name | varchar(50) | --- | c_contact | varchar(50) | --- | c_city | varchar(50) | --- | c_birth | date | --- --- **要求3:**将c_contact字段移动到c_birth字段后面 -ALTER TABLE customers MODIFY c_contact VARCHAR(50) after c_birth; --- **要求4:**将c_name字段数据类型改为 varchar(70) -ALTER TABLE customers MODIFY c_name VARCHAR(70); -DESC customers; --- **要求5:**将c_contact字段改名为c_phone -ALTER TABLE customer CHANGE c_contact c_phone VARCHAR(50); --- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -ALTER TABLE customers ADD c_gender CHAR(1)AFTER c_name; --- **要求7:**将表名改为customers_info -ALTER TABLE customers RENAME TO customers_info; --- **要求8:**删除字段c_city -ALTER TABLE customers_info DROP c_city; -``` - diff --git "a/02 \351\231\210\346\230\216\345\207\275/20230224\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" "b/02 \351\231\210\346\230\216\345\207\275/20230224\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" deleted file mode 100644 index a5b4b6e4a1416c75cac70deae73efee86b20e7c4..0000000000000000000000000000000000000000 --- "a/02 \351\231\210\346\230\216\345\207\275/20230224\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" +++ /dev/null @@ -1,115 +0,0 @@ -## 第1题:员工表 - -```mysql -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - - - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - -**要求1:**查询出薪资在12000~13000之间的员工信息。 - -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -**要求3:**将“李四”的家庭住址改为“广东韶关” - -**要求4:**查询出名字中带“小”的员工 - -**要求5:**查询出薪资高于11000的男员工信息 - -**要求6:**查询没有登记电话号码的员工 - -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - -```mysql - -``` - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -``` - -**要求1:** 查询大国 的国家名称、人口和面积。 - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) - -- 人口至少为 2500 万(即 25000000) - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -**要求4:**查询国家名字中包含“o“字母的国家信息 - -**要求5:**查询GDP值超过10000000000的国家信息 - -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -```mysql - -``` - diff --git "a/02 \351\231\210\346\230\216\345\207\275/20230309.md" "b/02 \351\231\210\346\230\216\345\207\275/20230309.md" deleted file mode 100644 index 941a1f3340ee10448d0ec41e15c4f1e26419670c..0000000000000000000000000000000000000000 --- "a/02 \351\231\210\346\230\216\345\207\275/20230309.md" +++ /dev/null @@ -1,126 +0,0 @@ -```mysql -create database lianxi charset utf8; -use lianxi; -create table stuinfo( -stuno char(10), -stuname varchar(10), -stusex char(6), -stuage int, -stuaddress varchar(10), -stuseat int -); -insert into stuinfo values -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'美国硅谷',2), -('s2503','马文才','男',18,'美国硅谷',3), -('s2504','欧阳俊雄','女',21,'美国硅谷',4), -('s2505','梅超风','男',16,'美国硅谷',5), -('s2506','陈旋风','男',19,'美国硅谷',6); -create table stuexam( -examno int, -stuno char(10), -wittenexam int, -labexam int -); -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); -create table stumarke( -examno int, -stuid char(10), -score int -); -insert into stumarke values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); --- 1.查询出年龄比班上平均年龄大的学生的信息 -SELECT - * -FROM - stuinfo -WHERE - stuage > ( SELECT avg( stuage ) FROM stuinfo ); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -SELECT - a.stuno,stuname,stusex,max(score) -FROM - stuinfo a - LEFT JOIN stumarke b ON a.stuno = b.stuid GROUP BY a.stuno; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -SELECT - a.stuno,stuname,stusex,round ((wittenexam+labexam)/2) -FROM - stuinfo a - LEFT JOIN stuexam b on a.stuseat = b.examno; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) --- 普通查询 -SELECT - * -FROM - stuinfo -WHERE - stusex = '男' - AND stuage >= 20; --- 子查询 -SELECT - * -FROM - stuinfo -WHERE - stuno = ( SELECT stuno FROM stuinfo WHERE stusex = '男' AND stuage >= 20); --- 5.查询出年龄比所有男生年龄都大的女生的信息 - -SELECT - * -FROM - stuinfo -WHERE - stusex = '女' - AND stuage > ( SELECT max( stuage ) FROM stuinfo WHERE stusex = '男' ); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -SELECT - a.*, - min( score ) fen -FROM - stuinfo a - LEFT JOIN stumarke b ON a.stuno = b.stuid -GROUP BY - a.stuno -HAVING - fen > 60; --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) --- 表连接 -SELECT - b.* -FROM - stumarke a - LEFT JOIN stuinfo b ON a.stuid = b.stuno -GROUP BY - a.stuid; --- in方法 -select * from stuinfo where stuno in (select stuid from stumarke group by stuid); - --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) --- --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) --- --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) --- --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) --- --- 13.查询班上比所有男生年龄都要大的女生的信息 --- --- 14.查询出只要比某个男生年龄大的女生的信息 --- -``` - diff --git "a/03\350\265\226\345\277\203\345\246\215/2.16 \350\257\255\345\217\245\350\247\204\350\214\203\347\255\211.md" "b/03\350\265\226\345\277\203\345\246\215/2.16 \350\257\255\345\217\245\350\247\204\350\214\203\347\255\211.md" deleted file mode 100644 index 9ece5998e6667d1e1af4e1cdc66648ddd4bb3e5c..0000000000000000000000000000000000000000 --- "a/03\350\265\226\345\277\203\345\246\215/2.16 \350\257\255\345\217\245\350\247\204\350\214\203\347\255\211.md" +++ /dev/null @@ -1,87 +0,0 @@ -# 2.16 MySQL - -### 语法规范 - -- 不区分大小写(建议小写) -- 命名:英文+下划线/数字 -- 不要使用关键字 可以使用`` -- 不能重名 - -### 注释 - -- \-- -- /* ... */ 多行 - -### 标点符号 - -- 成对的 ‘ ’ “ ” ( ) -- 英文状态 -- 特殊符号 - -1. ( ) 创建表函数等 -2. “ ” 字符串和日期类型 -3. “ ” 列的别名 -4. “ ” 大多等于 ’ ‘ - - - -## 数据类型 - -### 整数和小数 - -- 整数: - - int (0-255) m需要配合使用,如zerofill - -- 小数: - - float 单精度 - - double 双精度 - - decimal 定点数 默认(10,0) 122.55——123 - -### 字符串 - - char 固定长度 - - varchar(m) 可变长度 以实际填写的为准 - -### 日期 - - year 年 2023 - - date 日期 2023-02-16 - - time 时间 11:20:25 - - datetime 日期时间 2023+02-16 11:20:25 - -### enum和set - -- enum 单选 枚举型 只能选一个且不能不选 可以使用下标定位 -- set 多选 集合型 可以不选 下标2次方定位 - - - -## 练习 - -```mysql --- 创建库taobao -CREATE DATABASE taobao; -USE taobao; - --- 创建表computer --- 表里存放: --- 编号,显示宽度5位,不足的补0 --- 电脑品牌,定长10 --- 型号,可变长10 --- 价格:整数部分限长6,小数2位 -CREATE TABLE computer( - bianhao int(5) ZEROFILL, - pinpai CHAR(10), - xinghao VARCHAR(10), - jiage DOUBLE(8,2) -); -``` - diff --git "a/03\350\265\226\345\277\203\345\246\215/2.17 MySQL\350\257\255\345\217\245.md" "b/03\350\265\226\345\277\203\345\246\215/2.17 MySQL\350\257\255\345\217\245.md" deleted file mode 100644 index 8584ca59f7906e680557e2391b7e5336393b91d1..0000000000000000000000000000000000000000 --- "a/03\350\265\226\345\277\203\345\246\215/2.17 MySQL\350\257\255\345\217\245.md" +++ /dev/null @@ -1,624 +0,0 @@ -# MySQL语句 - -## 数据库 - -#### 创建数据库 - -```mysql -create database 数据库名 ; -create database 数据库名 charset 字符集; -``` - -#### 查看所有的数据库 - -```mysql -show databases; #有一个s,代表多个数据库 -``` - -#### 查看某个数据库的详细定义语句 - -```mysql -show create database 数据库名; -``` - -#### 修改数据库编码 - -```mysql -#修改数据库字符集和校对规则 -ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称 COLLATE 字符集对应校对规则; -``` - -```mysql -ALTER DATABASE mxdx_chapter3_two CHARACTER SET utf8 COLLATE utf8_general_ci; -``` - -==**注意,**==修改数据库编码只会影响之后创建的表的默认编码,之前创建的表不会受影响。 - -#### 删除数据库 - -```mysql -drop database 数据库名; -``` - -#### 使用数据库 - -```mysql -use 数据库名; -``` - - - -## 数据表 - -#### 查看某个数据库的所有表格 - -```mysql -use 数据库名; -show tables; -``` - -```mysql -show tables from 数据库名; -``` - -#### 创建表格 - -```mysql -create table 数据表名称( - 字段名 数据类型, - 字段名 数据类型 - ... -); - -示例: -create table teacher( - tid int, - tname varchar(5), - salary double, - weight double(5,2), - birthday date, - gender enum('男','女'), - blood enum('A','B','AB','O'), - tel char(11) -); -``` - -#### 查看表的详细定义信息,即查看建表语句 - -```mysql -show create table 表名称; -``` - -#### 修改数据表编码 - -```mysql -alter table 表名称 convert to character set utf8; -``` - -#### 查看表结构 - -```mysql -desc 表名称; -``` - -#### 删除表格,包括表结构和里面的数据 - -```mysql -drop table 表名称; -``` - -#### 修改表结构:删除字段 - -```mysql -alter table 表名称 drop 【column】 字段名称; -``` - -```mysql -alter table teacher drop column weight; -``` - -#### 修改表结构:增加字段 - -```mysql -alter table 表名称 add 【column】 字段名称 数据类型; -alter table 表名称 add 【column】 字段名称 数据类型 first; -alter table 表名称 add 【column】 字段名称 数据类型 after 另一个字段; - -示例: -alter table teacher add weight double(5,2); -alter table teacher drop column weight; - -alter table teacher add weight double(5,2) first; -alter table teacher drop column weight; - -alter table teacher add weight double(5,2) after salary; -alter table teacher drop column weight; -``` - -#### 修改表结构:修改字段的数据类型 - -```mysql -alter table 表名称 modify 字段名称 新的数据类型; -``` - -#### 修改表结构:修改字段的名称 - -```mysql -alter table 表名称 change 旧字段名称 新的字段名称 新的数据类型; -``` - -#### 修改表结构:修改字段位置 - -```mysql -alter table 表名称 modify 字段名称 数据类型 first; -alter table 表名称 modify 字段名称 数据类型 after 另一个字段; -``` - -#### 修改表名称(重命名表) - -```mysql -alter table 旧表名 rename 【to】 新表名; -rename table 旧表名称 to 新表名称; - -示例: -alter table teacher rename to t_tea; -rename table t_tea to teacher; -``` - - - -## 添加语句 - -#### (1)添加一条记录到某个表中 - -```mysql -insert into 表名称 values(值列表); #值列表中的值的顺序、类型、个数必须与表结构一一对应 -``` - -```mysql -insert into teacher values(1,'张三',15000,120.5,'1990-5-1','男','O','13789586859'); -``` - -#### (2)添加一条记录到某个表中 - -```mysql -insert into 表名称 (字段列表) values(值列表); #值列表中的值的顺序、类型、个数必须与(字段列表)一一对应 -``` - -```mysql -insert into teacher(tid,tname,salary,phone) values(3,'王五',16000,'15789546586'); -``` - -#### (3)添加多条记录到某个表中 - -```mysql -insert into 表名称 values(值列表),(值列表),(值列表); #值列表中的值的顺序、类型、个数必须与表结构一一对应 -``` - -```mysql -insert into 表名称 (字段列表) values(值列表),(值列表),(值列表); #值列表中的值的顺序、类型、个数必须与(字段列表)一一对应 -``` - -```mysql -insert into teacher (tid,tname,salary,phone) -values(4,'赵六',16000,'15789546586'), -(5,'汪飞',18000,'15789548886'), -(6,'天琪',19000,'15909546586'); -``` - - - -## 修改语句 - -#### 修改所有行 - -```mysql -update 表名称 set 字段名 = 值, 字段名 = 值; #给所有行修改 -``` - -```mysql -#修改所有人的薪资,都涨了1000 -update teacher set salary = salary + 1000 ; -``` - -#### 修改部分行 - -```mysql -update 表名称 set 字段名 = 值, 字段名 = 值 where 条件; #给满足条件的行修改 -``` - -```mysql -#修改天琪的薪资降低5000 -update teacher set salary = salary-5000 where tname = '天琪'; -``` - - - -## 删除 - -#### 删除部分行的数据 - -```mysql -delete from 表名称 where 条件; -``` - -```mysql -delete from teacher where tname = '天琪'; -``` - -#### 删除整张表的数据,但表结构留下 - -```mysql -delete from 表名称; -``` - -```mysql -delete from teacher; -``` - -#### 截断表,清空表中的数据,只留有表结构 - -```mysql -truncate 表名称; -``` - -```mysql -truncate teacher; -``` - -truncate表和delete表的区别: - -delete是一条一条删除记录的。如果在事务中,事务提交之前支持回滚。(后面会讲事务) - -truncate是把整个表drop,新建一张,效率更高。就算在事务中,也无法回滚。 - -```mysql -#同学问:是否可以删除salary字段的值,字段留着,值删掉 -#可以实现,但是不是用delete,用update - -#同学问:是否可以删除salary字段,连同字段和这个字段的数据都是删除 -#可以实现,但是不是用delete,用alter table 表名称 drop column 字段名; - -#同学问:只删除某个单元格的值 -#可以实现,但是不是用delete,用update -``` - - - -# 作业 - -## 第1题 - -1、创建数据库test01_market - -```mysql -CREATE DATABASE IF NOT EXISTS test01_market; -USE test01_market; -``` - -2、创建表格customers - -| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date | - -```mysql -CREATE TABLE customers( - c_num INT(11), - c_name VARCHAR(50), - c_contact VARCHAR(50), - c_city VARCHAR(50), - c_birth DATE -); -``` - -**要求3:**将c_contact字段移动到c_birth字段后面 - -```mysql -ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth; -``` - -**要求4:**将c_name字段数据类型改为 varchar(70) - -```mysql -ALTER TABLE customers MODIFY c_name VARCHAR(70); -``` - -**要求5:**将c_contact字段改名为c_phone - -```mysql -ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); -``` - -**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -```mysql -ALTER TABLE customers ADD c_gender CHAR AFTER c_name; -``` - -**要求7:**将表名改为customers_info - -```mysql -ALTER TABLE customers RENAME TO customers_info; -``` - -**要求8:**删除字段c_city - -```mysql -ALTER TABLE customers_info DROP c_city; -``` - - - -## 第2题 - -1、创建数据库test02_library - -```mysql -CREATE DATABASE test02_library; -USE test02_library; -``` - -2、创建表格books - -| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------- | -------- | ------------- | -------- | ---- | -| b_id | 书编号 | int(11) | 否 | 是 | -| b_name | 书名 | varchar(50) | 否 | 否 | -| authors | 作者 | varchar(100) | 否 | 否 | -| price | 价格 | float | 否 | 否 | -| pubdate | 出版日期 | year | 否 | 否 | -| note | 说明 | varchar(100) | 是 | 否 | -| num | 库存 | int(11) | 否 | 否 | - -```mysql -CREATE TABLE books( - b_id INT(11) NOT NULL UNIQUE COMMENT '书编号', - b_name VARCHAR(50) NOT NULL COMMENT '书名', - `authors` VARCHAR(100) NOT NULL COMMENT '作者', - price FLOAT NOT NULL COMMENT '价格', - pubdate YEAR NOT NULL COMMENT '出版日期', - note VARCHAR(100) COMMENT '说明', - num INT(11) NOT NULL COMMENT '库存' -); -``` - -3、向books表中插入记录 - -| b_id | b_name | authors | price | pubdate | note | num | -| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -1) 指定所有字段名称插入第一条记录 - -```mysql -INSERT INTO books(b_id,b_name,`authors`,price,pubdate,note,num) VALUES(1,'Tal of AAA','Dickes',23,'1995','novel',11); -``` - -2)不指定字段名称插入第二记录 - -```mysql -INSERT INTO books VALUES(2,'EmmaT','Jane lura',35,'1993','joke',22); -``` - -3)同时插入多条记录(剩下的所有记录) - -```mysql -INSERT INTO books(b_id,b_name,`authors`,price,pubdate,note,num) -VALUES(3,'Story of Jane','Jane Tim',40,'2001','novel',0), -(4,'Lovey Day','George Byron',20,'2005','novel',30), -(5,'Old land','Honore Blade',30,'2010','law',0) -(6,'The Battle','Upton Sara',30,'1999','medicine',40), -(7,'Rose Hood','Richard haggard',28,'2008','cartoon',28); -``` - -4、将小说类型(novel)的书的价格都增加5。 - -```mysql -UPDATE books set price = price+5 where note = 'novel'; -``` - -5、将名称为EmmaT的书的价格改为40。 - -```mysql -UPDATE books set price = 40 WHERE b_name = 'EmmaT'; -``` - -6、删除库存为0的记录 - -```mysql -DELETE FROM books WHERE num = 0; -``` - - - -## 第3题 - -1、创建数据库test03_bookstore - -```mysql -CREATE DATABASE test03_bookstore; -USE test03_bookstore; -``` - -2、创建book表 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| sales | int(11) | NO | | NULL | | -| stock | int(11) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -```mysql -CREATE TABLE book( - id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, - title VARCHAR(100) NOT NULL, - author VARCHAR(100) NOT NULL, - price DOUBLE(11,2) NOT NULL, - sales INT(11) NOT NULL, - stock INT(11) NOT NULL, - img_path VARCHAR(100) NOT NULL -); -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+---+---------+--------+-------+-----+------+--------------------------+ -|id | title | author | price |sales| stock| img_path | -+---+---------+--------+------+------+------+--------------------------+ -| 1 |解忧杂货店 |东野圭吾 | 27.20 | 102 | 98 |upload/books/解忧杂货店.jpg | -+---+---------+--------+------+------+------+--------------------------+ -| 2 | 边城 | 沈从文 | 23.00| 102 | 98 | upload/books/边城.jpg | -+---+---------+--------+-------+-----+------+--------------------------+ - -代码: -ALTER TABLE book CONVERT TO CHARACTER SET utf8; -INSERT INTO book(id,title,author,price,sales,stock,img_path) -VALUES(1,'解忧杂货店','东野圭吾',27.20,102,98,'upload/books/解忧杂货店.jpg'), -(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg'); -``` - -3、创建用户表users,并插入数据 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| username | varchar(100) | NO | UNI | NULL | | -| password | varchar(100) | NO | | NULL | | -| email | varchar(100) | YES | | NULL | | -+----------+--------------+------+-----+---------+----------------+ - -代码: -CREATE TABLE users( - id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, - username VARCHAR(100) NOT NULL UNIQUE KEY, - `password` VARCHAR(100) NOT NULL , - email VARCHAR(100) -); -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+----------+----------------------------------+--------------------+ -| id | username | password | email | -+----+----------+----------------------------------+--------------------+ -| 1 | admin | 112233 | admin@mxdx.com | -+----+----------+----------------------------------+--------------------+ - -代码: -INSERT INTO users(id,username,`password`,email) -VALUES(1,'admin','112233','admin@mxdx.com'); -``` - -4、创建订单表orders - -```mysql -+--------------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+--------------+--------------+------+-----+---------+-------+ -| id | varchar(100) | NO | PRI | NULL | | -| order_time | datetime | NO | | NULL | | -| total_count | int(11) | NO | | NULL | | -| total_amount | double(11,2) | NO | | NULL | | -| state | int(11) | NO | | NULL | | -| user_id | int(11) | NO | MUL | NULL | | -+--------------+--------------+------+-----+---------+-------+ - -代码: -CREATE TABLE orders( - id VARCHAR(100) NOT NULL PRIMARY KEY, - order_time DATETIME NOT NULL, - total_count INT(11) NOT NULL, - total_amount DOUBLE(11,2) NOT NULL, - state INT(11) NOT NULL, - user_id INT(11) NOT NULL -); -ALTER TABLE orders ADD INDEX(user_id); -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+-----------+-------------------+-----------+------------+-----+---------+ -| id |order_time |total_count|total_amount|state| user_id | -+-----------+-------------------+-----------+------------+-----+---------+ -|15294258455691|2018-06-20 00:30:45| 2 | 50.20 | 0 | 1 | -+-----------+-------------------+-----------+------------+-----+---------+ - -代码: -INSERT INTO orders VALUES('15294258455691','2018-06-20 00:30:45',2,50.20,0,1); -``` - -5、创建订单明细表order_items - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| count | int(11) | NO | | NULL | | -| amount | double(11,2) | NO | | NULL | | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -| order_id | varchar(100) | NO | MUL | NULL | | -+----------+--------------+------+-----+---------+----------------+ - -代码: -CREATE TABLE order_items( - id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, - count INT(11) NOT NULL, - amount DOUBLE(11,2) NOT NULL, - title VARCHAR(100) NOT NULL, - `author` VARCHAR(100) NOT NULL, - price DOUBLE(11,2) NOT NULL, - img_path VARCHAR(100) NOT NULL, - order_id VARCHAR(100) NOT NULL -); -ALTER TABLE order_items ADD INDEX(order_id); -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+--+-----+------+---------+---------+-------+------------+---------------+ -|id|count|amount| title | author | price | img_path | order_id | -+----+-----+------+---------+---------+-------+------------+-------------+ -|1 |1 |27.20|解忧杂货店|东野圭吾|27.20|static/img/default.jpg|15294258455691| -+----+-----+------+---------+---------+-------+------------+-------------+ -|2 |1 |23.00| 边城 |沈从文 |23.00|static/img/default.jpg|15294258455691| -+----+-----+------+---------+---------+-------+------------+-------------+ - -代码: -ALTER TABLE order_items CONVERT TO CHARACTER SET utf8; -INSERT INTO order_items -VALUES -(1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg','15294258455691'), -(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg','15294258455691'); -``` - - - diff --git "a/03\350\265\226\345\277\203\345\246\215/2.21 \347\272\246\346\235\237.md" "b/03\350\265\226\345\277\203\345\246\215/2.21 \347\272\246\346\235\237.md" deleted file mode 100644 index 64433ab552ef9c1965355a152a52d0883b38ce84..0000000000000000000000000000000000000000 --- "a/03\350\265\226\345\277\203\345\246\215/2.21 \347\272\246\346\235\237.md" +++ /dev/null @@ -1,599 +0,0 @@ -# 2.21 约束 - -#### 主键、唯一、非空、默认、自增、外键 - -### 1、主键约束 - -(1)关键字是primary key -(2)特点 -A:每一个表只能有一个主键约束 -B:主键约束的字段值是不允许为null,也不允许重复的 - -```mysql -CREATE TABLE teacher( - tid INT PRIMARY KEY, - tname VARCHAR(20) -); - -只有一个主键: -若执行 -tid INT PRIMARY KEY, -tname VARCHAR(20) PRIMARY KEY, -错误代码: 1068 -Multiple(重复的,多倍的) primary key defined(定义) - -不为null: -若执行(INSERT INTO teacher VALUES(NULL,'王');) -错误代码: 1048 -Column 'tid' cannot be null -主键不允许为null - -不重复: -若执行两遍相同的insert语句(INSERT INTO teacher VALUES(1,'柴');),就会报错 -错误代码: 1062 -Duplicate(重复的) entry(输入) '1' -for key 'teacher.PRIMARY' -意思:违反了主键约束 -``` - -复合主键 - -```mysql -PRIMARY KEY(sid,cid) //放在在create table()里最后一行 -``` - -建表后增加主键约束 - -```mysql -ALTER TABLE 表名称 ADD PRIMARY KEY(字段列表); - -示例: -ALTER TABLE student ADD PRIMARY KEY(sid); -``` - -删除主键约束 - -```mysql -ALTER TABLE 表名称 DROP PRIMARY KEY; - -示例: -ALTER TABLE student DROP PRIMARY KEY; -``` - -### 2、唯一键约束 - -(1)关键字:unique key -(2)特点 -A:允许为null,但是不能重复 -B:一个表可以有多个唯一键约束 - -建表后增加唯一键约束 - -```mysql -ALTER TABLE 表名称 ADD UNIQUE KEY (字段列表); - -示例: -ALTER TABLE student ADD UNIQUE KEY(sname); -``` - -删除唯一主键约束 - -```mysql -ALTER TABLE 表名称 DROP INDEX 索引名; -``` - -### 3、非空约束 - -不要求唯一,但是要求非空 - -### 4、默认值约束 - -如果某个字段,在添加数据时未指定值时,希望不要用NULL处理,而是按照一个默认值处理, -就可以使用默认值约束。 -例如:学生性别,在未指定时,默认按照 男 处理 - -```mysql -CREATE TABLE student( - sid INT PRIMARY KEY, #主键约束 - sname VARCHAR(20) UNIQUE KEY, #唯一键约束 - birthday DATE, - score INT NOT NULL, #非空约束 - gender ENUM('男','女') NOT NULL DEFAULT '男', #非空 + 默认值约束 - weight DOUBLE(4,1), - tel CHAR(11) UNIQUE KEY #唯一键约束 -); -``` - -删除非空约束 - -```mysql -ALTER TABLE 表名 MODIFY 字段 字段类型; -``` - - 增加非空约束 - -```mysql -ALTER TABLE 表名 MODIFY 字段 字段类型 NOT NULL; -``` - -非空+默认值中删除默认值约束,保留非空约束 - -```mysql -ALTER TABLE 表名 MODIFY 字段 字段类型 NOT NULL; - -反过来: -ALTER TABLE 表名 MODIFY 字段 字段类型 DEFAULT 默认值; -``` - -保留非空和默认值约束 - -```mysql -ALTER TABLE 表名 MODIFY 字段 字段类型 DEFAULT 默认值 NOT NULL -``` - -查看约束名等信息,查看系统库“information_schema”的“table_constraints” - -```mysql -SELECT * FROM information_schema.table_constraints WHERE table_name = '表名称'; -``` - -### 5、检查约束 - -###### (MySQL5.7不支持CHECK约束,在MySQL8.0中开始支持CHECK约束) - -### 6、外键约束 - -约束两个表的关系,或者是一个表的两个字段之间的关系。 - -(1)主表(父表)和从表(子表) -主表:被依赖,被参考 -从表:依赖别人的,参考别人的 - -2)外键的建立和指定要在从表中定义 -(3)关键字 foreign key -(4)格式 foreign key (从表的字段) references 主表(被依赖字段) -(5)要求 -A:主表必须先存在 -B:主表被依赖字段必须有索引,所以通常是主键列或唯一键列等才能作为被依赖字段。 -C:删除表时,要么先删除从表,再删除主表,要么先解除外键约束,然后各自删除。 -D:从(子)表的依赖字段的数据,必须在主(父)表被依赖字段中选择。 - 添加和修改都是这样的。 -E:主(父)表被依赖字段的数据不能轻易的删除和修改,要看是否被引用 - -外键约束等级为 on update/delete cascade /(set null) - -```mysql -CREATE TABLE dept( - did INT PRIMARY KEY, - dname VARCHAR(20) -); -CREATE TABLE emp( - eid INT, - ename VARCHAR(20), - deptid INT, - #这里的部门编号可以和dept表中的部门编号名字不一样,但是数据类型和逻辑意义要一样 - FOREIGN KEY (deptid) REFERENCES dept(did) -); -``` - -### 7、自增属性 - -维护某个字段的值自动增长的一个属性。 -它的要求: -(1)一个表最多只能有一个字段是自增的 -(2)自增的字段必须是整数类型 -(3)自增的字段必须是键约束的字段(通常是主键、唯一键) - -自增字段赋值为null和0的时候,会自增,如果赋值为其他的值,按照你指定的值来。 - -```mysql -CREATE TABLE stu( - sid INT AUTO_INCREMENT PRIMARY KEY, - sname VARCHAR(20) -); -``` - -```mysql -ALTER TABLE 表名称 AUTO_INCREMENT = 起始值; - -示例: -ALTER TABLE stu AUTO_INCREMENT = 1001; -``` - - - -# 作业 - -## 第1题 - -1、创建数据库test01_company - -```mysql -CREATE DATABASE test01_company CHARSET utf8; -USE test01_company; -``` - -2、创建表格offices - -| 字段名 | 数据类型 | -| ---------- | ----------- | -| officeCode | int | -| city | varchar(30) | -| address | varchar(50) | -| country | varchar(50) | -| postalCode | varchar(25) | - -```mysql -CREATE TABLE offices( - officeCode INT, - city VARCHAR(30), - address VARCHAR(50), - country VARCHAR(50), - postalCode VARCHAR(25) -); -``` - -3、创建表格employees - -| 字段名 | 数据类型 | -| ------------- | ---------------------------- | -| empNum | int(11) | -| lastName | varchar(50) | -| firstName | varchar(50) | -| mobile | varchar(25) | -| code | int | -| jobTitle | varchar(50) | -| birth | date | -| Note | varchar(255) | -| Sex | varchar(5) | - -```mysql -CREATE TABLE employees( - empNum INT(11), - lastName VARCHAR(50), - firstName VARCHAR(50), - mobile VARCHAR(25), - `code` INT, - jobTitle VARCHAR(50), - birth date, - Note VARCHAR(255), - Sex VARCHAR(5) -); -``` - -**要求4:**将表employees的mobile字段修改到code字段后面。 - -```mysql -ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER `code`; -``` - -**要求5:**将表employees的birth字段改名为birthday; - -```mysql -ALTER TABLE employees CHANGE birth birthday DATE; -``` - -**要求6:**修改sex字段,数据类型为char(1) - -```mysql -ALTER TABLE employees MODIFY sex CHAR(1); -``` - -**要求7:**删除字段note; - -```mysql -ALTER TABLE employees DROP note; -``` - -**要求8:**增加字段名favoriate_activity,数据类型为varchar(100); - -```mysql -ALTER TABLE employees ADD favoriate_activity VARCHAR(100); -``` - -**要求9:**将表employees的名称修改为 employees_info - -```mysql -ALTER TABLE employees RENAME employees_info; -``` - - - -## 第2题 - -1、创建数据库test02db - -```mysql -CREATE DATABASE test02db CHARSET utf8; -USE test02db; -``` - -2、创建表格pet - -| 字段名 | 字段说明 | 数据类型 | -| ------- | -------- | ----------- | -| name | 宠物名称 | varchar(20) | -| owner | 宠物主人 | varchar(20) | -| species | 种类 | varchar(20) | -| sex | 性别 | char(1) | -| birth | 出生日期 | year | -| death | 死亡日期 | year | - -```mysql -CREATE TABLE pet( - `name` VARCHAR(20) COMMENT '宠物名称', - `owner` VARCHAR(20) COMMENT '宠物主人', - species VARCHAR(20) COMMENT '种类', - sex CHAR(1) COMMENT '性别', - birth year COMMENT '出生日期', - death year COMMENT '死亡日期' -); -``` - -3、添加记录 - -| name | owner | species | sex | birth | death | -| ------ | ------ | ------- | ---- | ----- | ----- | -| Fluffy | harold | Cat | f | 2003 | 2010 | -| Claws | gwen | Cat | m | 2004 | | -| Buffy | | Dog | f | 2009 | | -| Fang | benny | Dog | m | 2000 | | -| bowser | diane | Dog | m | 2003 | 2009 | -| Chirpy | | Bird | f | 2008 | | - -```mysql -INSERT INTO pet -VALUES - ('Fluffy','harold','Cat','f','2003','2010'), - ('Claws','gwen','Cat','m','2004',NULL), - ('Butty',NULL,'Dog','f','2009',NULL), - ('Fang','benny','Dog','m','2000',NULL), - ('bowser','diane','Dog','m','2003','2009'), - ('Chirpy',NULL,'Bird','f','2008',NULL); -``` - -4、 添加字段主人的生日owner_birth。 - -```mysql -ALTER TABLE pet ADD owner_birth date; -``` - -5、 将名称为Claws的猫的主人改为kevin - -```mysql -UPDATE pet SET `owner` = 'kevin' WHERE `name` = 'Claws'; -``` - -6、 将没有死的狗的主人改为duck - -```mysql -UPDATE pet SET `owner` = 'duck' WHERE species = 'Dog' AND death IS NULL; -``` - -7、 查询没有主人的宠物的名字; - -```mysql -SELECT `name` FROM pet WHERE `owner` IS NULL; -``` - -8、 查询已经死了的cat的姓名,主人,以及去世时间; - -```mysql -SELECT `name`, `owner`, death FROM pet WHERE species='Cat' AND death IS NOT NULL; -``` - -9、 删除已经死亡的狗 - -```mysql -DELETE FROM pet WHERE death is not null and species = 'Dog'; -``` - -10、查询所有宠物信息 - -```mysql -SELECT * FROM pet; -``` - - - -## 第3题 - -1、创建数据库:test03_company - -```mysql -CREATE DATABASE test03_company CHARSET utf8; -USE test03_company; -``` - -2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - -A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - -```mysql -CREATE TABLE department( - depid VARCHAR(5) NOT NULL PRIMARY KEY, - depname VARCHAR(5) NOT NULL, - deinfo VARCHAR(30) -); -``` - -B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - -* ​ 雇员编号为主键; -* ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); -* ​ 性别默认为男; - -```mysql -CREATE TABLE employee ( - empid VARCHAR(5) NOT NULL PRIMARY KEY, - `name` VARCHAR(5) NOT NULL, - sex VARCHAR(1) NOT NULL DEFAULT '男', - title VARCHAR(10), - birthday date NOT NULL, - depid VARCHAR(5), - FOREIGN KEY(empid) REFERENCES department(depid) ON UPDATE CASCADE ON DELETE SET NULL -); -``` - -C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - -3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) - -```mysql -CREATE TABLE salary( - empid VARCHAR(5) PRIMARY KEY, - basesalary INT, - titlesalary INT, - deduction INT -); -ALTER TABLE salary MODIFY empid VARCHAR(5); -ALTER TABLE salary ADD FOREIGN KEY(empid) REFERENCES employee(empid) ON UPDATE CASCADE ON DELETE CASCADE; -``` - - - -4、添加数据如下: - -部门表: - -| 部门编号 | 部门名称 | 部门简介 | -| -------- | -------- | ------------ | -| 111 | 生产部 | Null | -| 222 | 销售部 | Null | -| 333 | 人事部 | 人力资源管理 | - -```mysql -INSERT INTO department -VALUES -(111,'生产部',NULL), -(222,'销售部',NULL), -(333,'人事部','人力资源管理'); -``` - - 雇员表: - -| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | -| -------- | ---- | ---- | ---------- | ---------- | ------------ | -| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | -| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | -| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | -| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | - -```mysql -INSERT INTO employee VALUES -(1001,'张三','男','高级工程师','1975-1-1',111), -(1002,'李四','女','助工','1985-1-1',111), -(1003,'王五','男','工程师','1978-11-11',222), -(1004,'张六','男','工程师','1999-1-1',222); -``` - - 工资表: - -| 雇员编号 | 基本工资 | 职务工资 | 扣除 | -| -------- | -------- | -------- | ---- | -| 1001 | 2200 | 1100 | 200 | -| 1002 | 1200 | 200 | NULL | -| 1003 | 2900 | 700 | 200 | -| 1004 | 1950 | 700 | 150 | - -```mysql -INSERT INTO salary VALUES -(1001,2200,1100,200), -(1002,1200,200,NULL), -(1003,2900,700,200), -(1004,1950,700,150); -``` - - - -## 第4题 - -1、创建一个数据库:test04_school - -```mysql -CREATE DATABASE test04_school CHARSET utf8; -USE test04_school; -``` - -2、创建如下表格 - -表1 Department表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | -| DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | -| DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | - -```mysql -CREATE TABLE Department( - DepNo INT(10) UNIQUE PRIMARY KEY COMMENT '部门号', - DepName VARCHAR(20) COMMENT '部门名称', - DepNote VARCHAR(50) NOT NULL COMMENT '部门备注' -); -``` - -表2 Teacher表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| Number | 教工号 | int | 是 | 否 | 是 | 是 | -| Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | -| Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | -| Birth | 出生日期 | date | 否 | 否 | 否 | 否 | -| DepNo | 部门号 | int | 否 | 是 | 否 | 否 | -| Salary | 工资 | float | 否 | 否 | 否 | 否 | -| Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | - -```mysql -CREATE TABLE Teacher( - Number INT UNIQUE PRIMARY KEY COMMENT '教工号', - `Name` VARCHAR(30) COMMENT '姓名', - Sex VARCHAR(4) NOT NULL COMMENT '性别', - Birth date NOT NULL COMMENT '出生日期', - DepNo INT NOT NULL COMMENT '部门号', - Salary FLOAT NOT NULL COMMENT '工资', - Address VARCHAR(100) NOT NULL COMMENT '家庭住址', - FOREIGN KEY(DepNo) REFERENCES Department(DepNo) -); -``` - -3、添加记录 - -| **DepNo** | **DepName** | **DepNote** | -| --------- | ----------- | ------------------ | -| 601 | 软件技术系 | 软件技术等专业 | -| 602 | 网络技术系 | 多媒体技术等专业 | -| 603 | 艺术设计系 | 广告艺术设计等专业 | -| 604 | 管理工程系 | 连锁经营管理等专业 | - -```mysql -INSERT INTO Department VALUES -(601,'软件设计系','软件技术等专业'), -(602,'网络技术系','多媒体技术等专业'), -(603,'艺术设计系','广告艺术设计等专业'), -(604,'管理工程系','连锁经营管理等专业'); -``` - -| **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | -| ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | -| 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | -| 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | -| 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | -| 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | -| 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | - -```mysql -INSERT INTO Teacher VALUES -(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'), -(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'), -(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'), -(2004,'James','女','1980-10-20',602,3500,'四川省成都市'), -(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); -``` - -4、用SELECT语句查询Teacher表的所有记录。 - -```mysql -SELECT * FROM Teacher; -``` diff --git "a/03\350\265\226\345\277\203\345\246\215/2.23 \346\237\245\350\257\242select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" "b/03\350\265\226\345\277\203\345\246\215/2.23 \346\237\245\350\257\242select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" deleted file mode 100644 index 6b0181a1e8bcb963cc5eaf95d3663d8fe0596e21..0000000000000000000000000000000000000000 --- "a/03\350\265\226\345\277\203\345\246\215/2.23 \346\237\245\350\257\242select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" +++ /dev/null @@ -1,361 +0,0 @@ -# 2.23 查询select语句和运算符 - -### select语句格式: - -```mysql -SELECT 字段列表 FROM 表名称; - -SELECT 字段列表 FROM 表名称 WHERE 条件; -``` - -### 使用别名(临时名称) - -```mysql -select 字段名1 as "别名1", 字段名2 as "别名2" from 表名称 as 别名; -``` - -- 列的别名有空格时,请加双引号。**==列的别名==中没有空格时,双引号可以加也可以不加**。 -- ==**表的别名不能加双引号**==,表的别名中间不能包含空格。 -- as大小写都可以,as也完全可以省略。 - -```mysql -示例: -mysql> select id "学号",name "姓名" from student; -+------+------+ -| 学号 | 姓名 | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) - -mysql> select id 学号,name 姓名 from student; -+------+------+ -| 学号 | 姓名 | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) -``` - -### 结果去重 - -mysql可以在查询结果中使用distinct关键字去重。 - -```mysql -select distinct 字段列表 from 表名称 【where 条件】; - -示例: -select distinct did from t_employee; -``` - -### 算术运算符 - -```mysql -加:+ - 在MySQL +就是求和,没有字符串拼接 -减:- -乘:* -除:/ div(只保留整数部分) - div:两个数相除只保留整数部分 - /:数学中的除 -模:% mod - -mysql中没有 +=等运算符 -``` - -### 比较运算符 - -```mysql -大于:> -小于:< -大于等于:>= -小于等于:>= -等于:= 不能用于null判断 -不等于:!= 或 <> 不能用于null判断 -判断是null 用 is null 或 用 <=> null -判断不是null is not null -``` - -### 区间或集合范围比较运算符 - -```mysql -区间范围:between x and y - not between x and y -集合范围:in (x,x,x) - not in(x,x,x) -between ... and ... 结果包含两端的边界 - -示例: -#查询薪资在[10000,15000] -select * from t_employee where salary>=10000 && salary<=15000; -select * from t_employee where salary between 10000 and 15000; - -#查询籍贯在这几个地方的 -select * from t_employee where work_place in ('北京', '浙江', '江西'); - -#查询薪资不在[10000,15000] -select * from t_employee where salary not between 10000 and 15000; - -#查询籍贯不在这几个地方的 -select * from t_employee where work_place not in ('北京', '浙江', '江西'); -``` - -### 模糊匹配比较运算符 - -%:代表任意个字符 - -_:代表一个字符,如果两个下划线代表两个字符 - -```mysql -示例: -#查询名字中包含'冰'字 -select * from t_employee where ename like '%冰%'; - -#查询名字以‘雷'结尾的 -select * from t_employee where ename like '%远'; - -#查询名字以’李'开头 -select * from t_employee where ename like '李%'; - -#查询名字有冰这个字,但是冰的前面只能有1个字 -select * from t_employee where ename like '_冰%'; - -#查询当前mysql数据库的字符集情况 -show variables like '%character%'; -``` - -### 逻辑运算符 - -```mysql -逻辑与:&& 或 and -逻辑或:|| 或 or -逻辑非:! 或 not -逻辑异或: xor - -示例: -#查询薪资高于15000,并且性别是男的员工 -select * from t_employee where salary>15000 and gender='男'; -select * from t_employee where salary>15000 && gender='男'; - -select * from t_employee where salary>15000 & gender='男';#错误得不到值 &按位与 -select * from t_employee where (salary>15000) & (gender='男'); - -#查询薪资高于15000,或者did为1的员工 -select * from t_employee where salary>15000 or did = 1; -select * from t_employee where salary>15000 || did = 1; - -#查询薪资不在[15000,20000]范围的 -select * from t_employee where salary not between 15000 and 20000; -select * from t_employee where !(salary between 15000 and 20000); - -#查询薪资高于15000,或者did为1的员工,两者只能满足其一 -select * from t_employee where salary>15000 xor did = 1; -select * from t_employee where (salary>15000) ^ (did = 1); -``` - -### 关于null值的问题、 - -```mysql -#(1)判断时 -xx is null -xx is not null -xx <=> null - -#(2)计算时 -ifnull(xx,代替值) 当xx是null时,用代替值计算 - -示例: -#查询员工的实发工资,实发工资 = 薪资 + 薪资 * 奖金比例 -select ename , salary + salary * commission_pct "实发工资" from t_employee; #失败,当commission_pct为null,结果都为null - -select ename ,salary , commission_pct, salary + salary * ifnull(commission_pct,0) "实发工资" from t_employee; -``` - -### 位运算符 - -```mysql -左移:<< -右移:>> -按位与:& -按位或:| -按位异或:^ -按位取反:~ -``` - - - -# 作业 - -## 第1题:员工表 - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - -```mysql -CREATE DATABASE test03 CHARSET utf8; -USE test03; - -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - -**要求1:**查询出薪资在12000~13000之间的员工信息。 - -```mysql -SELECT * FROM employee WHERE salary BETWEEN 12000 AND 13000; -``` - -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -```mysql -SELECT id,`name`,addr FROM employee WHERE `name` LIKE '刘%'; -``` - -**要求3:**将“李四”的家庭住址改为“广东韶关” - -```mysql -UPDATE employee SET addr = '广东韶关' WHERE `name` = '李四'; -``` - -**要求4:**查询出名字中带“小”的员工 - -```mysql -SELECT `name` FROM employee WHERE `name` LIKE '%小%'; -``` - -**要求5:**查询出薪资高于11000的男员工信息 - -```mysql -SELECT * FROM employee WHERE salary>11000 AND sex='男'; -``` - -**要求6:**查询没有登记电话号码的员工 - -```mysql -SELECT `name` FROM employee WHERE tel is NULL; -``` - -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -```mysql -SELECT `name` FROM employee WHERE sex = '男' AND salary = 12000 OR addr = '广东深圳' OR addr='广东广州'; -``` - -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - -```mysql -SELECT `name`,salary FROM employee; -``` - - - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -``` - -**要求1:** 查询大国 的国家名称、人口和面积。 - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) - -- 人口至少为 2500 万(即 25000000) - - ```mysql - SELECT `name`,area,population FROM countries_info WHERE area>3000000 OR population>=25000000; - ``` - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -```mysql -SELECT * FROM countries_info WHERE continent = 'Asia'; -``` - -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -```mysql -SELECT * FROM countries_info WHERE area<10000 AND population<100000; -``` - -**要求4:**查询国家名字中包含“o“字母的国家信息 - -```mysql -SELECT * FROM countries_info WHERE `name` LIKE '%o%'; -``` - -**要求5:**查询GDP值超过10000000000的国家信息 - -```mysql -SELECT * FROM countries_info WHERE gdp>10000000000; -``` - -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -```mysql -SELECT `name` 国家名,population 人口,gdp GDP值,gdp/population AS 人均贡献GDP值 FROM countries_info; -``` - -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - -```mysql -SELECT * FROM countries_info WHERE gdp/population<1000; -``` - -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -```mysql -SELECT `name` 国家名,population 人口,gdp GDP值,area/population AS 人均国土面积值 FROM countries_info; -``` - diff --git "a/03\350\265\226\345\277\203\345\246\215/2.28 \345\205\263\350\201\224\346\237\245\350\257\242.md" "b/03\350\265\226\345\277\203\345\246\215/2.28 \345\205\263\350\201\224\346\237\245\350\257\242.md" deleted file mode 100644 index bb1e5ee1e82df9a2e91d3a85385dc3818222e1bf..0000000000000000000000000000000000000000 --- "a/03\350\265\226\345\277\203\345\246\215/2.28 \345\205\263\350\201\224\346\237\245\350\257\242.md" +++ /dev/null @@ -1,530 +0,0 @@ -# 2.28 关联查询 - -#### 分组函数 - -| **AVG(x) :求平均值** | **SUM(x):求总和** | -| ------------------------ | -------------------- | -| **MAX(x):求最大值** | **MIN(x):求最小值** | -| **COUNT(x):统计记录数** | | - -count(*)是对满足条件的(如果没有where条件,就是对所有记录)记录累加数量 - -count(常量值)等价于count(*) - -count(字段名/表达式) 只统计非NULL值的记录数 - -#### 单行函数 - -##### 数学函数 - -| 函数 | 用法 | -| ------------- | ------------------------------------------------------------ | -| ABS(x) | 返回x的绝对值 | -| CEIL(x) | 返回大于x的最小整数值 | -| FLOOR(x) | 返回小于x的最大整数值 | -| MOD(x,y) | 返回x/y的模 | -| RAND() | 返回0~1的随机值 | -| ROUND(x,y) | 返回参数x的四舍五入的有y位的小数的值 | -| TRUNCATE(x,y) | 返回数字x截断为y位小数的结果 | -| FORMAT(x,y) | 强制保留小数点后y位,整数部分超过三位的时候以逗号分割,并且返回的结果是文本类型的 | -| SQRT(x) | 返回x的平方根 | -| POW(x,y) | 返回x的y次方 | - -##### 字符串函数 - -| 函数 | 功能描述 | -| ------------------------------------------------------------ | ------------------------------------------------------------ | -| CONCAT(S1,S2,……Sn) | 连接S1,S2,……Sn为一个字符串 | -| CONCAT_WS(s,S1,S2,……Sn) | 同CONCAT(S1,S2,…)函数,但每个字符串之间要加上s | -| CHAR_LENGTH(s) | 返回字符串s的字符数 | -| LENGTH(s) | 返回字符串s的字节数,和字符集有关 | -| LOCATE(str1,str)或 POSITION(str1 in str)或 INSTR(str,str1) | 返回子字符串str1在str中的开始位置 | -| UPPER(s)或UCASE(s) | 将字符串s的所有字母转成大写字母 | -| LOWER(s)或LCASE(s) | 将字符串s的所有字母转成小写字母 | -| LEFT(s,n) | 返回字符串s最左边的n个字符 | -| RIGHT(s,n) | 返回字符串s最右边的n个字符 | -| LPAD(str,len,pad) | 用字符串pad对str最左边进行填充直到str的长度达到len | -| RPAD(str,len,pad) | 用字符串pad对str最右边进行填充直到str的长度达到len | -| LTRIM(s) | 去掉字符串s左侧的空格 | -| RTRIM(s) | 去掉字符串s右侧的空格 | -| TRIM(s) | 去掉字符串s开始与结尾的空格 | -| TRIM([BOTH] s1 FROM s) | 去掉字符串s开始与结尾的s1 | -| TRIM([LEADING] s1 FROM s) | 去掉字符串s开始处的s1 | -| TRIM([TRAILING]s1 FROM s) | 去掉字符串s结尾处的s1 | -| INSERT(str,index,len,instr) | 将字符串str从index位置开始len个字符的替换为字符串instr | -| REPLACE(str,a,b) | 用字符串b替换字符串str中所有出现的字符串a | -| REPEAT(str,n) | 返回str重复n次的结果 | -| REVERSE(s) | 将字符串反转 | -| STRCMP(s1,s2) | 比较字符串s1,s2 | -| SUBSTRING(s,index,len) | 返回从字符串s的index位置截取len个字符 | -| SUBSTRING_INDEX(str, 分隔符,count) | 如果count是正数,那么从左往右数,第n个分隔符的左边的全部内容。例如,substring_index("www.mxdx.com",".",1)是"www"。如果count是负数,那么从右边开始数,第n个分隔符右边的所有内容。例如,substring_index("www.mxdx.com",".",-1)是"com"。 | - -##### 日期时间函数 - -| 函数 | 功能描述 | -| ------------------------------------------------------------ | --------------------------------------------------- | -| CURDATE()或CURRENT_DATE() | 返回当前系统日期 | -| CURTIME()或CURRENT_TIME() | 返回当前系统时间 | -| NOW()/SYSDATE()/CURRENT_TIMESTAMP()/ LOCALTIME()/LOCALTIMESTAMP() | 返回当前系统日期时间 | -| UTC_DATE()/UTC_TIME() | 返回当前UTC日期值/时间值 | -| UNIX_TIMESTAMP(date) | 返回一个UNIX时间戳 | -| YEAR(date)/MONTH(date)/DAY(date)/ HOUR(time)/MINUTE(time)/SECOND(time) | 返回具体的时间值 | -| EXTRACT(type FROM date) | 从日期中提取一部分值 | -| DAYOFMONTH(date)/DAYOFYEAR(date) | 返回一月/年中第几天 | -| WEEK(date)/WEEKOFYEAR(date) | 返回一年中的第几周 | -| DAYOFWEEK() | 返回周几,注意,周日是1,周一是2,…周六是7 | -| WEEKDAY(date) | 返回周几,注意,周一是0,周二是1,…周日是6 | -| DAYNAME(date) | 返回星期,MONDAY,TUESDAY,…SUNDAY | -| MONTHNAME(date) | 返回月份,January,… | -| DATEDIFF(date1,date2)/TIMEDIFF(time1,time2) | 返回date1-date2的日期间隔/返回time1-time2的时间间隔 | -| DATE_ADD(date,INTERVAL expr type)或ADDDATE/DATE_SUB/SUBDATE | 返回与给定日期相差INTERVAL时间段的日期 | -| ADDTIME(time,expr)/SUBTIME(time,expr) | 返回给定时间加上/减去expr的时间值 | -| DATE_FORMAT(datetime,fmt)/ TIME_FORMAT(time,fmt) | 按照字符串fmt格式化日期datetime值/时间time值 | -| STR_TO_DATE(str,fmt) | 按照字符串fmt对str进行解析,解析为一个日期 | -| GET_FORMAT(val_type,format_type) | 返回日期时间字符串的显示格式 | - -函数中日期时间类型说明 - -| 参数类型 | 描述 | 参数类型 | 描述 | -| -------- | ---- | ------------- | -------- | -| YEAR | 年 | YEAR_MONTH | 年月 | -| MONTH | 月 | DAY_HOUR | 日时 | -| DAY | 日 | DAY_MINUTE | 日时分 | -| HOUR | 时 | DAY_SECOND | 日时分秒 | -| MINUTE | 分 | HOUR_MINUTE | 时分 | -| SECOND | 秒 | HOUR_SECOND | 时分秒 | -| WEEK | 星期 | MINUTE_SECOND | 分秒 | -| QUARTER | 一刻 | | | - -函数中format参数说明 - -| 格式符 | 说明 | 格式符 | 说明 | -| ------ | --------------------------------------------------------- | ------ | ------------------------------------------------------- | -| %Y | 4位数字表示年份 | %y | 两位数字表示年份 | -| %M | 月名表示月份(January,…) | %m | 两位数字表示月份(01,02,03,…) | -| %b | 缩写的月名(Jan.,Feb.,…) | %c | 数字表示月份(1,2,3…) | -| %D | 英文后缀表示月中的天数(1st,2nd,3rd,…) | %d | 两位数字表示表示月中的天数(01,02,…) | -| %e | 数字形式表示月中的天数(1,2,3,…) | %p | AM或PM | -| %H | 两位数字表示小数,24小时制(01,02,03,…) | %h和%I | 两位数字表示小时,12小时制(01,02,03,…) | -| %k | 数字形式的小时,24小时制(1,2,3,…) | %l | 数字表示小时,12小时制(1,2,3,…) | -| %i | 两位数字表示分钟(00,01,02,…) | %S和%s | 两位数字表示秒(00,01,02,…) | -| %T | 时间,24小时制(hh:mm:ss) | %r | 时间,12小时制(hh:mm:ss)后加AM或PM | -| %W | 一周中的星期名称(Sunday,…) | %a | 一周中的星期缩写(Sun.,Mon.,Tues.,…) | -| %w | 以数字表示周中的天数(0=Sunday,1=Monday,…) | %j | 以3位数字表示年中的天数(001,002,…) | -| %U | 以数字表示的的第几周(1,2,3,…) 其中Sunday为周中的第一天 | %u | 以数字表示年中的年份(1,2,3,…) 其中Monday为周中第一天 | -| %V | 一年中第几周(01~53),周日为每周的第一天,和%X同时使用 | %X | 4位数形式表示该周的年份,周日为每周第一天,和%V同时使用 | -| %v | 一年中第几周(01~53),周一为每周的第一天,和%x同时使用 | %x | 4位数形式表示该周的年份,周一为每周第一天,和%v同时使用 | -| %% | 表示% | | | - -GET_FORMAT函数中val_type 和format_type参数说明 - -| 值类型 | 格式化类型 | 显示格式字符串 | -| -------- | ---------- | ----------------- | -| DATE | EUR | %d.%m.%Y | -| DATE | INTERVAL | %Y%m%d | -| DATE | ISO | %Y-%m-%d | -| DATE | JIS | %Y-%m-%d | -| DATE | USA | %m.%d.%Y | -| TIME | EUR | %H.%i.%s | -| TIME | INTERVAL | %H%i%s | -| TIME | ISO | %H:%i:%s | -| TIME | JIS | %H:%i:%s | -| TIME | USA | %h:%i:%s %p | -| DATETIME | EUR | %Y-%m-%d %H.%i.%s | -| DATETIME | INTERVAL | %Y%m%d %H%i%s | -| DATETIME | ISO | %Y-%m-%d %H:%i:%s | -| DATETIME | JIS | %Y-%m-%d %H:%i:%s | -| DATETIME | USA | %Y-%m-%d %H.%i.%s | - -#### 加密函数 - -| 函数 | 用法 | -| --------------------- | ------------------------------------------------------------ | -| password(str) | 返回字符串str的加密版本,41位长的字符串 | -| md5(str) | 返回字符串str的md5值,也是一种加密方式 | -| SHA(str) | 返回字符串str的sha算法加密字符串,40位十六进制值的密码字符串 | -| SHA2(str,hash_length) | 返回字符串str的sha算法加密字符串,密码字符串的长度是hash_length/4。hash_length可以是224、256、384、512、0,其中0等同于256。 | - -#### 条件判断 - -| 函数 | 功能 | -| ------------------------------------------------------------ | ------------------------------------------------------------ | -| IF(value,t,f) | 如果value是真,返回t,否则返回f | -| IFNULL(value1,value2) | 如果value1不为空,返回value1,否则返回value2 | -| CASE WHEN 条件1 THEN result1 WHEN 条件2 THEN result2 … ELSE resultn END | 依次判断条件,哪个条件满足了,就返回对应的result,所有条件都不满足就返回ELSE的result。如果没有单独的ELSE子句,当所有WHEN后面的条件都不满足时则返回NULL值结果。等价于Java中if...else if.... | -| CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值2 THEN 值2 … ELSE 值n END | 判断表达式expr与哪个常量值匹配,找到匹配的就返回对应值,都不匹配就返回ELSE的值。如果没有单独的ELSE子句,当所有WHEN后面的常量值都不匹配时则返回NULL值结果。等价于Java中switch....case | - -#### 七种查询 - -###### (1)内连接 inner join - -###### (2)外连接 outer join - -左外连接 left outer join 或 left join - -右外连接 right outer join 或 right join - -全外连接 full outer join 或 full join -- union 代替 - -但是,mysql不支持全外连接,没有full join。 - -mysql使用union关键字合并其他的查询结果实现全外连接的效果。 - -内连接 ==> A∩B - -左连接 ==> A 或 A-A∩B - -右连接 ==> B 或 B-A∩B - -全外连接 ==> A∪B 或 A∪B - A∩B - -左连接的A union 右连接的B 得到 A∪B - -左连接的A-A∩B union 右连接B-A∩B 得到 A∪B - A∩B - -###### 使用union实现全外连接的效果 - -(1)A∪B - -转换为 左连接的A union 右连接的B - -(2)A∪B - A∩B - -转换为 左连接的A-A∩B union 右连接的B-A∩B - -###### 自连接 - -进行关联查询的两个表,本质上是一个表。 - -分析员工表: - -有一个字段是mid,是领导编号,即表示这个员工归谁管。 - -那么这里的领导编号其实就是这个领导他作为员工的员工编号。 - -通过取别名的方式,把一张表虚拟成两张表。 - -当然,也要关联字段。 - -# 作业 - -1. 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。 - -2. **数据库的表结构** - -表(一)Student (学生表) - -| 属性名 | 数据类型 | 可否为空 | 含义 | -| --------- | ------------ | -------- | ------------ | -| Sno | varchar (20) | 否 | 学号(主码) | -| Sname | varchar (20) | 否 | 学生姓名 | -| Ssex | varchar (20) | 否 | 学生性别 | -| Sbirthday | datetime | 可 | 学生出生年月 | -| Class | varchar (20) | 可 | 学生所在班级 | - -表(二)Course(课程表) - -| 属性名 | 数据类型 | 可否为空 | 含义 | -| ------ | ------------ | -------- | ---------------- | -| Cno | varchar (20) | 否 | 课程号(主码) | -| Cname | varchar (20) | 否 | 课程名称 | -| Tno | varchar (20) | 否 | 教工编号(外码) | - -表(三)Score(成绩表) - -| 属性名 | 数据类型 | 可否为空 | 含义 | -| -------------- | ------------ | -------- | -------------- | -| Sno | varchar (20) | 否 | 学号(外码) | -| Cno | varchar (20) | 否 | 课程号(外码) | -| Degree | Decimal(4,1) | 可 | 成绩 | -| 主码:Sno+ Cno | | | | - -表(四)Teacher(教师表) - -| 属性名 | 数据类型 | 可否为空 | 含义 | -| --------- | ------------ | -------- | ---------------- | -| Tno | varchar (20) | 否 | 教工编号(主码) | -| Tname | varchar (20) | 否 | 教工姓名 | -| Tsex | varchar (20) | 否 | 教工性别 | -| Tbirthday | datetime | 可 | 教工出生年月 | -| Prof | varchar (20) | 可 | 职称 | -| Depart | varchar (20) | 否 | 教工所在部门 | - -```mysql -create database test03 charset utf8; - -use test03; - -CREATE TABLE `student` ( - `Sno` varchar(20) NOT NULL COMMENT '学号', - `Sname` varchar(20) NOT NULL COMMENT '学生姓名', - `Ssex` varchar(20) NOT NULL COMMENT '学生性别', - `Sbirthday` datetime DEFAULT NULL COMMENT '学生出生年月', - `Class` varchar(20) DEFAULT NULL COMMENT '学生所在班级', - PRIMARY KEY (`Sno`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -insert into student values -('108','曾华','男','1977-9-1','95033'), -('105','匡明','男','1975-10-2','95031'), -('107','王丽','女','1976-1-23','95033'), -('101','李军','男','1976-2-20','95033'), -('109','王芳','女','1975-2-10','95031'), -('103','陆君','男','1974-6-3','95031'); - -CREATE TABLE `teacher` ( - `Tno` varchar(20) NOT NULL COMMENT '教工编号', - `Tname` varchar(20) NOT NULL COMMENT '教工姓名', - `Tsex` varchar(20) NOT NULL COMMENT '教工性别', - `Tbirthday` datetime DEFAULT NULL COMMENT '教工出生年月', - `Prof` varchar(20) DEFAULT NULL COMMENT '职称', - `Depart` varchar(20) NOT NULL COMMENT '教工所在部门', - PRIMARY KEY (`Tno`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -insert into teacher values -('804','李诚','男','1958-12-2','副教授','计算机系'), -('856','张旭','男','1969-3-12','讲师','电子工程系'), -('825','王萍','女','1972-5-5','助教','计算机系'), -('831','刘冰','女','1977-8-14','助教','电子工程系'); - -CREATE TABLE `course` ( - `Cno` varchar(20) NOT NULL COMMENT '课程号', - `Cname` varchar(20) NOT NULL COMMENT '课程名称', - `Tno` varchar(20) NOT NULL COMMENT '教工编号', - PRIMARY KEY (`Cno`), - KEY `Tno` (`Tno`), - CONSTRAINT `course_ibfk_1` FOREIGN KEY (`Tno`) REFERENCES `teacher` (`Tno`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -insert into course values -('3-105','计算机导论','825'), -('3-245','操作系统','804'), -('6-166','数字电路','856'), -('9-888','高等数学','831'); - -CREATE TABLE `score` ( - `Sno` varchar(20) NOT NULL COMMENT '学号', - `Cno` varchar(20) NOT NULL COMMENT '课程号', - `Degree` decimal(4,1) DEFAULT NULL COMMENT '成绩', - PRIMARY KEY (`Sno`,`Cno`), - KEY `Cno` (`Cno`), - CONSTRAINT `score_ibfk_1` FOREIGN KEY (`Cno`) REFERENCES `course` (`Cno`), - CONSTRAINT `score_ibfk_2` FOREIGN KEY (`Sno`) REFERENCES `student` (`Sno`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -insert into score values -('103','3-245',86), -('105','3-245',75), -('109','3-245',68), -('103','3-105',92), -('105','3-105',88), -('109','3-105',76), -('101','3-105',64), -('107','3-105',91), -('108','3-105',78), -('101','6-166',85), -('107','6-166',79), -('108','6-166',81); -``` - -表(一)Student - -| Sno | Sname | Ssex | Sbirthday | class | -| ---- | ----- | ---- | --------- | ----- | -| 108 | 曾华 | 男 | 1977-9-1 | 95033 | -| 105 | 匡明 | 男 | 1975-10-2 | 95031 | -| 107 | 王丽 | 女 | 1976-1-23 | 95033 | -| 101 | 李军 | 男 | 1976-2-20 | 95033 | -| 109 | 王芳 | 女 | 1975-2-10 | 95031 | -| 103 | 陆君 | 男 | 1974-6-3 | 95031 | - -表(二)Course - -| Cno | Cname | Tno | -| ----- | ---------- | ---- | -| 3-105 | 计算机导论 | 825 | -| 3-245 | 操作系统 | 804 | -| 6-166 | 数字电路 | 856 | -| 9-888 | 高等数学 | 831 | - -表(三)Score - -| Sno | Cno | Degree | -| ---- | ----- | ------ | -| 103 | 3-245 | 86 | -| 105 | 3-245 | 75 | -| 109 | 3-245 | 68 | -| 103 | 3-105 | 92 | -| 105 | 3-105 | 88 | -| 109 | 3-105 | 76 | -| 101 | 3-105 | 64 | -| 107 | 3-105 | 91 | -| 108 | 3-105 | 78 | -| 101 | 6-166 | 85 | -| 107 | 6-166 | 79 | -| 108 | 6-166 | 81 | - -表(四)Teacher - -| Tno | Tname | Tsex | Tbirthday | Prof | Depart | -| ---- | ----- | ---- | --------- | ------ | ---------- | -| 804 | 李诚 | 男 | 1958-12-2 | 副教授 | 计算机系 | -| 856 | 张旭 | 男 | 1969-3-12 | 讲师 | 电子工程系 | -| 825 | 王萍 | 女 | 1972-5-5 | 助教 | 计算机系 | -| 831 | 刘冰 | 女 | 1977-8-14 | 助教 | 电子工程系 | - -3. **数据库中的数据**: - --- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息 - -```mysql -select sname,course.cname from student inner join score on student.sno=score.sno left join course on score.cno=course.cno; -``` - --- 2,查询没有学生的教师的所有信息 - -```mysql -select Teacher.Tno,Tname,Tsex,Tbirthday,Prof,Depart from Teacher left join Course on Teacher.Tno = Course.Tno left join Score on Course.Cno = Score.Cno where Score.Sno is null; -``` - -4. ##### 查询: - -① 查询Score表中的最高分的学生学号和课程号。 - -```mysql -select sno,cno from score where degree=(select max(degree) from score); -``` - -② 查询所有学生的Sname、Cno和Degree列。 - -```mysql -select Sname,Cno,Degree from Student,Score where Student.Sno=Score.Sno; -``` - -③ 查询所有学生的Sno、Cname和Degree列。 - -```mysql -select sno,cname,degree from course,score where course.cno = score.cno; -``` - -④ 查询所有学生的Sname、Cname和Degree列。 - -```mysql -select sname,cname,degree from student,course,score where student.sno=score.sno and course.cno=score.cno; -``` - -⑤ 查询“95033”班学生的平均分。 - -```mysql -select cno,avg(degree) from score where sno in (select sno from student where class='95031') group by cno; -``` - -⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 - -```mysql -select * from score where cno='3-105' and degree>(select degree from score where sno='109' and cno='3-105'); -``` - -⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 - -```mysql -select * from Score a where Degree <(select MAX(degree) from Score b where a.Cno=b.Cno) and Sno in(select Sno from Score group by Sno having count(*)>1); -``` - -⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 - -```mysql -select * from Student,Score where Student.Sno=Score.Sno and Score.Degree>(select Degree from Score where Cno='3-105' and Sno='109'); -``` - -⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 - -```mysql -select sno,sname,sbirthday from student where sbirthday in (select sbirthday from student where sno='108'); -``` - -⑩ 查询“张旭“教师任课的学生成绩。 - -```mysql -select Sname,Degree from Student,Score where Student.Sno=Score.Sno and Cno ='6-166'; -``` - -11 查询选修某课程的同学人数多于5人的教师姓名。 - -```mysql -Select * from teacher where tno=(Select tno from course where cno=(Select cno from score group by cno having count(*)>5)); -``` - -12 查询出“计算机系“教师所教课程的成绩表。 - -```mysql -select * from score where cno in(select cno from course where tno in(select tno from teacher where depart='计算机系')); -``` - -13 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 - -```mysql -select Tname,Prof from Teacher a where Prof not in(select Prof from Teacher b where a.Depart!=b.Depart); -``` - -14 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 - -```mysql -select * from score where cno='3-105' and degree>any(select degree from score where cno='3-245') order by degree desc; -``` - -15 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. - -```mysql -select * from score where cno='3-105' and degree>all(select degree from score where cno='3-245'); -``` - -16 查询成绩比该课程平均成绩低的同学的成绩表。 - -```mysql -select Sno,Cno,Degree from Score a where a.Degree<(select AVG(Degree) from Score b where a.Cno=b.Cno); -``` - -17 查询所有任课教师的Tname和Depart. - -```mysql -select Tname,Depart from Teacher where Tname in (select distinct Tname from Teacher,Course,Score where Teacher.Tno=Course.Tno and Course.Cno=Score.Cno); -``` - -18 查询所有未讲课的教师的Tname和Depart. - -```mysql -select Tname,Depart from Teacher where Tname not in (select distinct Tname from Teacher,Course,Score where Teacher.Tno=Course.Tno and Course.Cno=Score.Cno); -``` - -19 查询“男”教师及其所上的课程。 - -```mysql -select Tname,Cname from Teacher,Course where Tsex='男' and Teacher.Tno=Course.Tno; -``` - -20 查询最高分同学的Sno、Cno和Degree列。 - -```mysql -select sno,cno,degree from score where degree = (select max(degree) from score); -``` - -21 查询和“李军”同性别的所有同学的Sname. - -```mysql -select sname from student where ssex = (select ssex from student where sname = '李军'); -``` - -22 查询和“李军”同性别并同班的同学Sname. - -```mysql -select sname from student where ssex = (select ssex from student where sname = '李军') and class = (select class from student where sname = '李军'); -``` - -23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 - -```mysql -select sname,ssex,degree from student s,course c,score sc where s.sno=sc.sno and sc.cno=c.cno and c.cname = '计算机导论' and s.ssex = '男'; -``` - diff --git "a/03\350\265\226\345\277\203\345\246\215/3.07 \345\255\220\346\237\245\350\257\242.md" "b/03\350\265\226\345\277\203\345\246\215/3.07 \345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index b9895847e1c455184d75a2d70770c59269f43335..0000000000000000000000000000000000000000 --- "a/03\350\265\226\345\277\203\345\246\215/3.07 \345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,342 +0,0 @@ -# 子查询 - -## SELECT的SELECT中嵌套子查询 - -```mysql -/* -子查询:嵌套在另一个SQL语句中的查询。 -SELECT语句可以嵌套在另一个SELECT中,UPDATE,DELETE,INSERT,CREATE语句等。 - -(1)SELECT的SELECT中嵌套子查询 -*/ - -#(1)在“t_employee”表中查询每个人薪资和公司平均薪资的差值, -#并显示员工薪资和公司平均薪资相差5000元以上的记录。 -SELECT ename AS "姓名", - salary AS "薪资", - ROUND((SELECT AVG(salary) FROM t_employee),2) AS "全公司平均薪资", - ROUND(salary-(SELECT AVG(salary) FROM t_employee),2) AS "差值" -FROM t_employee -WHERE ABS(ROUND(salary-(SELECT AVG(salary) FROM t_employee),2))>5000; - -#(2)在“t_employee”表中查询每个部门平均薪资和公司平均薪资的差值。 -SELECT did,AVG(salary), -AVG(salary)-(SELECT AVG(salary) FROM t_employee) -FROM t_employee -GROUP BY did; -``` - - - -## SELECT的WHERE或HAVING中嵌套子查询 - -当子查询结果作为外层另一个SQL的过滤条件,通常把子查询嵌入到WHERE或HAVING中。根据子查询结果的情况,分为如下三种情况。 - -- 当子查询的结果是单列单个值,那么可以直接使用比较运算符,如“<”、“<=”、“>”、“>=”、“=”、“!=”等与子查询结果进行比较。 -- 当子查询的结果是单列多个值,那么可以使用比较运算符IN或NOT IN进行比较。 -- 当子查询的结果是单列多个值,还可以使用比较运算符, 如“<”、“<=”、“>”、“>=”、“=”、“!=”等搭配ANY、SOME、ALL等关键字与查询结果进行比较。 - -```mysql -/* -子查询嵌套在where后面。 -在where或having后面的子查询结果是: -(1)单个值,那么可以用=,>,<,>=,<=,!=这样的运算符和子查询的结果做比较 -(2)多个值,那么需要用in,not in, >all,>any....形式做比较 - 如“<”、“<=”、“>”、“>=”、“=”、“!=”等搭配ANY、SOME、ALL等关键字与查询结果进行比较 - -*/ -#(1)在“t_employee”表中查询薪资最高的员工姓名(ename)和薪资(salary)。 -#SELECT ename,MAX(salary) FROM t_employee;#错误 -#取表中第一行员工的姓名和全公司最高的薪资值一起显示。 - -SELECT ename,salary -FROM t_employee -WHERE salary = (SELECT MAX(salary) FROM t_employee); - -#(2)在“t_employee”表中查询比全公司平均薪资高的男员工姓名和薪资。 -SELECT ename,salary -FROM t_employee -WHERE salary > (SELECT AVG(salary) FROM t_employee) AND gender = '男'; - -#(3)在“t_employee”表中查询和“白露”,“谢吉娜”同一部门的员工姓名和电话。 -SELECT ename,tel,did -FROM t_employee -WHERE did IN(SELECT did FROM t_employee WHERE ename='白露' || ename='谢吉娜'); - -SELECT ename,tel,did -FROM t_employee -WHERE did =ANY(SELECT did FROM t_employee WHERE ename='白露' || ename='谢吉娜'); - - -#(4)在“t_employee”表中查询薪资比“白露”,“李诗雨”,“黄冰茹”三个人的薪资都要高的员工姓名和薪资。 -SELECT ename,salary -FROM t_employee -WHERE salary >ALL(SELECT salary FROM t_employee WHERE ename IN('白露','李诗雨','黄冰茹')); - - -#(5)查询“t_employee”和“t_department”表,按部门统计平均工资, -#显示部门平均工资比全公司的总平均工资高的部门编号、部门名称、部门平均薪资, -#并按照部门平均薪资升序排列。 -SELECT t_department.did,dname,AVG(salary) -FROM t_employee RIGHT JOIN t_department -ON t_employee.did = t_department.did -GROUP BY t_department.did -HAVING AVG(salary) >(SELECT AVG(salary) FROM t_employee) -ORDER BY AVG(salary); -``` - - - -## SELECT中的EXISTS型子查询 - -EXISTS型子查询也是存在外层SELECT的WHERE子句中,不过它和上面的WHERE型子查询的工作模式不相同,所以这里单独讨论它。 - -如果EXISTS关键字后面的参数是一个任意的子查询,系统将对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS的结果为false,此时外层查询语句不进行查询。EXISTS和NOT EXISTS的结果只取决于是否返回行,而不取决于这些行的内容,所以这个子查询输入列表通常是无关紧要的。 - -如果EXISTS关键字后面的参数是一个关联子查询,即子查询的WHERE条件中包含与外层查询表的关联条件,那么此时将对外层查询表做循环,即在筛选外层查询表的每一条记录时,都看这条记录是否满足子查询的条件,如果满足就再用外层查询的其他WHERE条件对该记录进行筛选,否则就丢弃这行记录。 - -```mysql -#exist型子查询 -/* -(1)exists()中的子查询和外面的查询没有联合的情况下, -如果exists()中的子查询没有返回任何行,那么外面的子查询就不查了。 -(2)exists()中的子查询与外面的查询有联合工作的情况下, -循环进行把外面查询表的每一行记录的值,代入()中子查询,如果可以查到结果, -就留下外面查询的这条记录,否则就舍去。 -*/ - -#(1)查询“t_employee”表中是否存在部门编号为NULL的员工, -#如果存在,查询“t_department”表的部门编号、部门名称。 -SELECT * FROM t_department -WHERE EXISTS(SELECT * FROM t_employee WHERE did IS NULL); - -#(2)查询“t_department”表是否存在与“t_employee”表相同部门编号的记录, -#如果存在,查询这些部门的编号和名称。 -SELECT * FROM t_department -WHERE EXISTS(SELECT * FROM t_employee WHERE t_employee.did = t_department.did); - -#查询结果等价于下面的sql -SELECT DISTINCT t_department.* -FROM t_department INNER JOIN t_employee -ON t_department.did = t_employee.did; -``` - - - -## SELECT的FROM中嵌套子查询 - -当子查询结果是多列的结果时,通常将子查询放到FROM后面,然后采用给子查询结果取别名的方式,把子查询结果当成一张“动态生成的临时表”使用。 - -```mysql -#子查询嵌套在from后面 -/* -当一个查询要基于另一个查询结果来筛选的时候, -另一个查询还是多行多列的结果,那么就可以把这个查询结果当成一张临时表, -放在from后面进行再次筛选。 - -*/ - -#(1)在“t_employee”表中,查询每个部门的平均薪资, -#然后与“t_department”表联合查询 -#所有部门的部门编号、部门名称、部门平均薪资。 - -SELECT did,AVG(salary) FROM t_employee GROUP BY did; - -+------+-------------+ -| did | AVG(salary) | -+------+-------------+ -| 1 | 11479.3125 | -| 2 | 13978 | -| 3 | 37858.25 | -| 4 | 12332 | -| 5 | 11725 | -+------+-------------+ -5 ROWS IN SET (0.00 sec) - -#用上面的查询结果,当成一张临时表,与t_department部门表做联合查询 -#要给这样的子查询取别名的方式来当临时表用,不取别名是不可以的。 -#而且此时的别名不能加"" -#字段的别名可以加"",表的别名不能加"" - -SELECT t_department.did ,dname,AVG(salary) -FROM t_department LEFT JOIN (SELECT did,AVG(salary) FROM t_employee GROUP BY did) temp -ON t_department.did = temp.did; -#错误,from后面的t_department和temp表都没有salary字段, -#SELECT t_department.did ,dname,AVG(salary)出现AVG(salary)是错误的 - -SELECT t_department.did ,dname,pingjun -FROM t_department LEFT JOIN (SELECT did,AVG(salary) AS pingjun FROM t_employee GROUP BY did) temp -ON t_department.did = temp.did; - - -#(2)在“t_employee”表中查询每个部门中薪资排名前2的员工姓名、部门编号和薪资。 -SELECT * FROM ( -SELECT ename,did,salary, -DENSE_RANK() over (PARTITION BY did ORDER BY salary DESC) AS paiming -FROM t_employee) temp -WHERE temp.paiming <=2; -``` - - - -# 作业 - -```mysql -create database test charset utf8; - -use test; - -CREATE TABLE `stuinfo` ( - `stuNO` varchar(10) NOT NULL, - `stuName` varchar(10) NOT NULL, - `stuSex` enum('男','女') NOT NULL, - `stuAge` int(10) NOT NULL, - `stuAddress` varchar(255) NOT NULL, - `stuSeat` int(10) NOT NULL, - PRIMARY KEY (`stuNO`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -INSERT INTO `stuinfo` VALUES ('s2501', '张秋利', '男', 20, '美国硅谷', 1); -INSERT INTO `stuinfo` VALUES ('s2502', '李斯文', '女', 18, '湖北武汉', 2); -INSERT INTO `stuinfo` VALUES ('s2503', '马文才', '男', 18, '湖南长沙', 3); -INSERT INTO `stuinfo` VALUES ('s2504', '欧阳俊雄', '女', 21, '湖北武汉', 4); -INSERT INTO `stuinfo` VALUES ('s2505', '梅超风', '男', 16, '湖北武汉', 5); -INSERT INTO `stuinfo` VALUES ('s2506', '陈旋风', '男', 19, '美国硅谷', 6); - -CREATE TABLE `stuexam` ( - `examNO` int(10) NOT NULL, - `stuNO` varchar(10) NOT NULL, - `writtenExam` int(10) NOT NULL, - `labExam` int(10) NOT NULL, - PRIMARY KEY (`examNO`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -INSERT INTO `stuexam` VALUES (1, 's2501', 50, 70); -INSERT INTO `stuexam` VALUES (2, 's2502', 60, 65); -INSERT INTO `stuexam` VALUES (3, 's2503', 86, 70); -INSERT INTO `stuexam` VALUES (4, 's2504', 40, 80); -INSERT INTO `stuexam` VALUES (5, 's2505', 70, 85); -INSERT INTO `stuexam` VALUES (6, 's2506', 85, 90); -SET FOREIGN_KEY_CHECKS = 1; - -CREATE TABLE `stumarks` ( - `examNo` int(10) NOT NULL, - `stuID` varchar(10) NOT NULL, - `score` int(10) NOT NULL, - PRIMARY KEY (`examNo`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -INSERT INTO `stumarks` VALUES (1, 's2501', 88); -INSERT INTO `stumarks` VALUES (2, 's2502', 92); -INSERT INTO `stumarks` VALUES (3, 's2503', 53); -INSERT INTO `stumarks` VALUES (4, 's2502', 60); -INSERT INTO `stumarks` VALUES (5, 's2502', 99); -INSERT INTO `stumarks` VALUES (6, 's2503', 82); -``` - -1.查询出年龄比班上平均年龄大的学生的信息 - -```mysql -select * from stuinfo where stuAge > (select avg(stuAge) from stuinfo); -``` - -2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) - -```mysql -select stuno,stuname,stusex,max(score) 最高分 from stuinfo a right join stumarks b on a.stuno=b.stuid group by a.stuno; -``` - -3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) - -```mysql -select a.stuno,stuname,stusex,round((writtenexam+labexam)/2,2) 平均分 from stuinfo a left join stuExam b on a.stuno=b.stuno group by a.stuno; -``` - -4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -普通查询 - -```mysql -select * from stuinfo where stusex='男' and stuage>=20; -``` - -子查询 - -```mysql -select * from stuinfo where stusex='男' and stuage in (select stuage from stuinfo where stuage>=20); -``` - -5.查询出年龄比所有男生年龄都大的女生的信息 - -```mysql -select * from stuinfo where stuage not in (select stuage from stuinfo where stusex='男') and stusex='女'; -``` - -6.查询出所有选修课程都及格的学生的信息 (stuMarks) - -```mysql -select b.* from stumarks a left join stuinfo b on a.stuid=b.stuno where stuid not in (select stuid from stumarks where score<60) group by stuid; -``` - -7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -表连接 - -```mysql -select b.* from stumarks a left join stuinfo b on a.stuid=b.stuno group by stuid; -``` - -in方法 - -```mysql -select * from stuinfo where stuno in (select stuid from stumarks group by stuid); -``` - -8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - -表连接 - -```mysql -select a.* from stuinfo a left join stumarks b on a.stuno=b.stuid where b.stuid is null; -``` - -in方法 - -```mysql -select * from stuinfo where stuno not in (select stuid from stumarks); -``` - -9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) - -```mysql -select a.* from stuinfo a left join stumarks b on a.stuno=b.stuid where score in (select score from stumarks where score>90) group by stuid; -``` - -10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) - -``` -select * from (select stuid,(sum(score))/(count(score)) from stumarks group by stuid) a right join stuinfo b on a.stuid=b.stuno where stuid is not null; -``` - -11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) - -```mysql -select a.* from stuinfo a left join stumarks b on a.stuno=b.stuid where score > (select score from stumarks where stuid='s2501') group by stuid; -``` - -12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) - -```msql -select a.* from stuinfo a,(select stuid from stumarks where stuid!='s2501' group by stuid having max(score)>(select min(score) from stumarks where stuid='s2501')) b where a.stuno=b.stuid; -``` - -13.查询班上比所有男生年龄都要大的女生的信息 - -```mysql -select * from stuinfo where stuage not in (select stuage from stuinfo where stusex='男') and stusex='女'; -``` - -14.查询出只要比某个男生年龄大的女生的信息 - -```mysql -select * from stuinfo where stuage>(select min(stuage) from stuinfo where stusex='男') and stusex='女'; -``` - diff --git "a/04 \346\235\216\346\230\216\345\201\245/DDL\344\270\216DML\347\254\224\350\256\260.md" "b/04 \346\235\216\346\230\216\345\201\245/DDL\344\270\216DML\347\254\224\350\256\260.md" deleted file mode 100644 index 61b03f46bdd256a5ec6950a727e7499351c5a283..0000000000000000000000000000000000000000 --- "a/04 \346\235\216\346\230\216\345\201\245/DDL\344\270\216DML\347\254\224\350\256\260.md" +++ /dev/null @@ -1,389 +0,0 @@ -## MySQL数据库概述与用法 - -### 1. 基本概念 - -数据库是什么? - -​ 存储数据的地方 - -​ DB:数据库(Database) - -​ 早期分为:层次模型、网状模型、关系模型。 目前主要:关系型数据库、非关系型数据库两大类 - - - - 如何管理数据库? - -​ DBMS:数据库管理系统 ( DataBase Management System )是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。 如:MySQL、Oracle、SqlServer - - - -SQL是什么? - -​ SQL:是结构化查询语言(Structure Query Language),专门用来操作/访问数据库的通用语言。 - - - -SQL的语法规则: - -​ 1.mysql的sql语法不区分大小写 - -​ 2.命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 - -​ 3.建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) - -​ 4.数据库和表名、字段名等对象名中间不要包含空格 - -​ 5.同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名 - - - -使用cmd命令连接 - -​ cmd输入:mysql -h 主机名 -P 端口号 -u 用户名 -p密码** - - - -### 2. DDL-数据库操作 - -1 查询所有数据库 - -~~~ sql -show databases; -~~~ - -2 查询当前数据库 - -~~~ sql -select database(); -~~~ - -3 创建自己的数据库 - -~~~ sql -create database [if not exists]数据库名 charset utf8; - #如果不存在 -~~~ - -4 删除数据库 - -~~~ sql -drop database[if exists]数据库名; -~~~ - -5 使用自己的数据库 - -~~~ sql -use 数据库名; -~~~ - -### 3. DDL-表操作-查询 - -1 查询当前数据库所有表格 - -~~~ sql -show tables; #前提是要先进入所查询的数据库 -~~~ - -2 查询表结构 - -~~~ sql -desc 表名; -~~~ - -3 查询指定表的建表语句 - -~~~ sql -show create table 表名; -~~~ - -4 跳转查看其他数据库的表 - -~~~ sql -show tables from 数据库名; -~~~ - -### 4. DDL表操作-创建 - -~~~ sql -create table 表名( - 字段1 字段类型 comment '字段注释', #例;id int comment '编号', - 字段2 字段类型 comment '字段注释', - ... - 字段n 字段类型 comment '字段注释' -)comment 表注释; #例:comment '用户表' -~~~ - -### 5. 数据表 - -1 添加一条记录 - -~~~ sql -insert into 表名称 values(值列表); -~~~ - -2 添加两条记录到student表中 - -~~~ sql -insert into student values(1,'张三'); -insert into student values(2,'李四'); -~~~ - -3 查看一个表的数据 - -~~~ sql -select * from 表名称; -~~~ - -4 删除表 - -~~~ sql -drop table 表名称; -~~~ - -### 6. SQL脚本中如何加注释 - -​ 单行注释:#注释内容(mysql特有的) - -​ 单行注释:--空格注释内容 其中--后面的空格必须有 - -​ 多行注释:/* 注释内容 */ - -### 7. MySQL支持的数据类型 - -​ 数值类型:包括整数和小数,数值类型主要用来存储数字,不同的数值类型提供不同的取值范围,可以存储的值范围越大,所需要的存储空间也越大。 - -1 整数类型 - -​ 对于整数类型,MySQL还支持在类型名称后面加小括号(M),而小括号中的M表示显示宽度,M的取值范围是(0, 255)。int(M)这个M在字段的属性中指定了unsigned(无符号)和zerofill(零填充)的情况下才有意义。表示当整数值不够M位时,用0填充。如果整数值超过M位但是没有超过当前数据类型的 范围时,就按照实际位数存储。当M宽度超过当前数据类型可存储数值范围的最大宽度时,也是以实 际存储范围为准。 - -2 小数类型 - -​ MySQL中使用浮点数和定点数来表示小数。 - -​ 浮点数有两种类型:单精度浮点数(FLOAT)和双精度浮点数(DOUBLE),定点数只有DECIMAL。浮点数和定点数都可以用(M,D)来表示。 - -​ M是精度,表示该值总共显示M位,包括整数位和小数位,对于FLOAT和DOUBLE类型来说,M取值 范围为0~255,而对于DECIMAL来说,M取值范围为0~65。 - -​ D是标度,表示小数的位数,取值范围为0~30,同时必须<=M。 - -​ DECIMAL实际是以字符串形式存放的,在对精度要求比较高的时候(如货币、科学数据等)使用DECIMAL类型会比较好。浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围,它的缺点是会引起精度问题。 - -3 字符串类型 - -​ CHAR(M)为固定长度的字符串, M表示最多能存储的字符数,取值范围是0~255个字符,如果未指定(M)表示只能存储1个字符。例如CHAR(4)定义了一个固定长度的字符串列,其包含的字符个数最大为4,如果存储的值少于4个字符,右侧将用空格填充以达到指定的长度,当查询显示CHAR值时,尾部的空格将被删掉。 - -~~~ sql -create table temp( - c1 char, #默认为1 - c2 char(3) -); -~~~ - - - -VARCHAR(M)为可变长度的字符串,M表示最多能存储的字符数,最大范围由字符集及M共同决定。M不可缺省,必须指(M),否则报错。实际长度达不到M值时,以实际长度为准。VARBINARY类型的数据除了存储数据本身外,还需要1或2个字节来存储数据的字节数。 - -~~~ sql -create table temp( - name varchar(m) #最多不超过m个字符,这里的m不能不写 -); -~~~ - -4 日期时间类型 - -如果仅仅是表示年份信息,可以只使用YEAR类型,这样更节省空间,格式为“YYYY”,例如“2022”。YEAR允许的值范围是1901~2155。 - - 如果要表示年月日,可以使用DATE类型,格式为“YYYY-MM-DD”,例如“2022-02-04”。 - -如果要表示时分秒,可以使用TIME类型,格式为“HH:MM:SS”,例如“10:08:08”。 - -如果要表示年月日时分秒的完整日期时间,可以使用DATATIME类型,格式为“YYYY-MM-DD HH:MM:SS”,例如“2022-02-04 10:08:08”。 - -~~~ sql -create table temp( - d1 datetime, - d2 timestamp -); -insert into temp values('2021-9-2 14:45:52','2021-9-2 14:45:52'); -~~~ - -5 Enum和Set类型 - -无论是数值类型、日期类型、普通的文本类型,可取值的范围都非常大,但是有时候我们指定在固定的几个值范围内选择一个或多个,那么就需要使用ENUM枚举类型和SET集合类型了。 - -比如性别只有“男”或“女”;上下班交通方式可以有“地铁”、“公交”、“出租车”、“自行车”、“步行”等。 - -枚举和集合类型字段声明的语法格式如下: - -~~~ sql -reate table temp( - gender enum('男','女'), #字段名 ENUM('值1','值2',…'值n') 二选一 - hobby set('睡觉','打游戏','泡妞','写代码') #字段名 SET('值1','值2',…'值n') 可以选多个 -); -insert into temp values('男','睡觉,打游戏'); - -~~~ - -ENUM类型的字段在赋值时,只能在指定的枚举列表中取值,而且一次只能取一个。枚举列表最多可以有65535个成员。ENUM值在内部用整数表示,每个枚举值均有一个索引值, MySQL存储的就是这个索引编号。例如,定义ENUM类型的列(‘first’, ‘second’, ‘third’)。 - -6 数据字段属性 - -### unsigned - -- 无符号的 - -- 声明该数据列不允许负数 - - ### ZEROFILL - -- 0填充的 - -- 不足位数的用0来填充 , 如int(3),5则为005 - -**auto_increment** - -- 自动增长的 , 每添加一条数据 , 自动在上一个记录数上加 1(默认) -- 通常用于设置主键 , 且为整数类型 -- 可定义起始值和步长 - - 当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表 - - SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局) - -**NULL 和 NOT NULL** - -- 默认为NULL , 即没有插入该列的数值 -- 如果设置为NOT NULL , 则该列必须有值 - -**DEFAULT** - -- 默认的 - -- 用于设置默认值 - -- 例如,性别字段,默认为"男" , 否则为 "女" ; 若无指定该列的值 , 则默认值为"男"的值 - -## 8. 修改 - -1 修改数据库字符集和校对规则 - -~~~ sql -alter database 数据库名称 charset 字符集名称 collate 字符集对应校对规则; -alter database mxdx charset utf8 collate utf8_general_ci; -~~~ - -2 修改数据表编码 - -~~~ sql -alter table 表名称 convert to character set utf8; -~~~ - -3 修改表结构:删除字段 - -~~~ sql -alter table 表名称 drop column 字段名称; -~~~ - -4 修改表结构:增加字段 - -~~~ sql -#添加一个字段 -alter table 表名称 add column 字段名称 数据类型; -#增加一个字段,称为第一个字段 -alter table 表名称 add column 字段名称 数据类型 first; -#在某个字段后面增加一个字段 -alter table 表名称 add column 字段名称 数据类型 after 另一个字段; -~~~ - -5 修改表结构:修改字段的数据类型 - -~~~ sql -alter table 表名称 modify column 字段名称 新的数据类型; -~~~ - -6 修改表结构:修改字段的名称 - -~~~ sql -alter table 表名称 change column 旧字段名称 新的字段名称 新的数据类型; -~~~ - -7 修改表结构:修改字段位置 - -~~~ sql -#把这个表的某个字段调到第一 -alter table 表名称 modify column 字段名称 数据类型 first; -#把这个表的字段1调整到字段2后面 -alter table 表名称 modify column 字段1 数据类型 after 字段2; -~~~ - -8 修改表名称(重命名表) - -~~~ sql -alter table 旧表名 rename to 新表名; -#把 旧表名称 重命名为 新表名称 -rename table 旧表名称 to 新表名称; -~~~ - -## 9. DML添加数据 - -1 给所有字段赋值 - -​ 这种情况要求(值列表)的每一个值的类型、顺序与表结构一一对应 -​ 表中有几个字段,(值列表)必须有几个值,不能多也不能少 -​ 值如果是字符串或日期类型,需要加单引号 - -~~~ sql -insert into 表名称 values(添加内容); -#例:(1,'张三','m','1998-7-8',15000.0,) 需按顺序添加 -~~~ - -2 给指定字段赋值 - -~~~ sql -insert into 表名称 (字段1,字段2) values(内容1,内容2); -#例:insert into teacher (id,name) values (2,'李四'); -~~~ - -3 添加多行信息 - -~~~ sql -insert into 表名称 (字段1,字段2) values(内容1,内容2),(内容1,内容2)...; -#例:insert into teacher (id,name) values - (3,'王五'), - (4,'宋鑫'), - (5,'赵志浩'), -~~~ - -4 修改语句 - -~~~ sql -update 表名称 set 字段名 = 值, 字段名 = 值; #给所有行修改 -#例:update teacher set salary = salary + 1000 ; -~~~ - -5 修改指定行 - -~~~ sql -update 表名称 set 字段名 = 值, 字段名 = 值 where 条件; #给满足条件的行修改 -#例:update teacher set salary = salary-5000 where tname = '天琪'; -#修改天琪的薪资降低5000 -~~~ - -6 删除部分行的数据 - -~~~ sql -delete from 表名称 where 条件; -#例:delete from teacher where tname = '天琪'; -~~~ - -7 删除整张表的数据,但表结构留下 - -~~~ sql -delete from 表名称; -~~~ - -8 截断表,清空表中的数据,只留有表结构 - -~~~ sql -truncate 表名称; -~~~ - diff --git "a/04 \346\235\216\346\230\216\345\201\245/DQL\347\254\224\350\256\260.md" "b/04 \346\235\216\346\230\216\345\201\245/DQL\347\254\224\350\256\260.md" deleted file mode 100644 index 9743cbd8436d528286e755b5463490c2eb58f9aa..0000000000000000000000000000000000000000 --- "a/04 \346\235\216\346\230\216\345\201\245/DQL\347\254\224\350\256\260.md" +++ /dev/null @@ -1,220 +0,0 @@ -## 一. DQL——语法 - -### 1 DQL ——基本查询 - -​ 查询多个字段 - -~~~sql -select 字段1,字段2,字段3 ... from 表名; #查询指定字段 -select * from 表名; # 查询所有字段 -~~~ - -​ 设置别名 - -- 列的别名有空格时,请加双引号。**==列的别名==中没有空格时,双引号可以加也可以不加**。 -- ==**表的别名不能加双引号**==,表的别名中间不能包含空格。 -- as大小写都可以,as也完全可以省略。 - -~~~ sql -select 字段1 as 别名1,字段2 as '别名2'... from as 表名; -~~~ - -​ 去除重复信息 - -~~~ sql -select distinct 字段名 from 表名 【where 条件】; -~~~ - -### 2 DQL ——条件查询 - -​ 语法 - -~~~ sql -select 字段列表 from 表名 where 条件列表; -#例:select * from emp where age = 88; 查询年龄为88的行数据 -~~~ - -​ 条件 - -​ 比较运算符: - -​ > < >= <= <>或!= - -~~~ sql -select * from emp where age != 88; -#查询年龄不等于88的数据 -~~~ - -​ between ... and ... :在某个范围之内(含最小,最大值) - -~~~ sql -select * from emp where age between 15 and 20; -#查询年龄在15到20的数据 从小到大 -~~~ - -​ in(...) :在in之后的列表中的值,多重选择 - -~~~ sql -select * from emp where age in(18,20,40); -~~~ - -​ like 占位符:模糊匹配(_匹配单个字符,%匹配任意个字符) - -~~~ sql -select * from emp where name like '_ _'; -#查询名字为两个字的员工信息 -select * from emp where idcard like '%x'; #或17个_X -#查询身份证号最后一位是x的员工信息 -~~~ - -​ is null :默认内容为null的列表 - -~~~sql -select * from emp where 字段名 is null; -#查询该字段内容为null的数据 -~~~ - -​ 逻辑运算符: - -​ and 或&&:并且(多个条件同时成立) - -~~~ sql -select * from emp where age >= 15 && <= 20; -#查询年龄在15到20的数据 或and -select * from emp where gender = '女' and age < 25; -~~~ - -​ or 或 || :或者(多个条件任意一个成立) 多重选择 - -~~~ sql -select * from emp where age = 18 or age =20; -~~~ - -​ not 或 !:非,不是 - -~~~ sql -select * from emp where 字段名 is not null; -#查询该字段内容不是null的数据 -~~~ - -​ 补充: - -​ NULL在mysql中比较和计算都有特殊性,所有的计算遇到的null都是null。 - -​ 解决方法:ifnull(xx,代替值) 当xx是null时,用代替值计算 - -​ 实发工资 = 薪资 + 薪资 * 奖金比例 - -​ salary + salary * ifnull(commission_pct,0) as 实发工资 - -### 作业 - -~~~ sql -## 第1题:员工表 - -mysql -drop table if exists `employee`; -create database test charset utf8; -#创建employee表 -use test; -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - select * from employee; -**要求1:**查询出薪资在12000~13000之间的员工信息。 - select * from employee where salary between 12000 and 13000; -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - select id,name,addr from employee where name like'刘%'; -**要求3:**将“李四”的家庭住址改为“广东韶关” - update employee set addr = '广东韶关' where name = '李四'; -**要求4:**查询出名字中带“小”的员工 - select * from employee where name like '%小%'; -**要求5:**查询出薪资高于11000的男员工信息 - select * from employee where salary > 11000 and sex ='男'; -**要求6:**查询没有登记电话号码的员工 - select * from employee where tel is null; -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - select * from employee where sex ='男' and (salary > 12000 )or(addr in('广东深圳','广东广州')) ; -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - select name '姓名',salary '底薪', salary * 12 '年薪' from employee; - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 -create database test2 charset utf8; -use test2; -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -select * from countries_info - -**要求1:** 查询大国 的国家名称、人口和面积。 - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) - -- 人口至少为 2500 万(即 25000000) - select name,population,area from countries_info where area > 3000000 or population > 25000000; -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - select * from countries_info where continent = 'Asia' ; -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - select * from countries_info where area < 10000 and population < 100000; -**要求4:**查询国家名字中包含“o“字母的国家信息 - select * from countries_info where name like '%o%'; -**要求5:**查询GDP值超过10000000000的国家信息 - select * from countries_info where gdp > 10000000000; -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - select name '国家名', population '人口', gdp 'GDP值',gdp/ population '人均贡献GDP值' from countries_info; -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - select * from countries_info where gdp / population < 1000; -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - select name '国家名',area '面积', population '人口',area/ population '人均国土面积值' from countries_info; -~~~ - diff --git "a/04 \346\235\216\346\230\216\345\201\245/\345\244\247\344\275\234\344\270\232.md" "b/04 \346\235\216\346\230\216\345\201\245/\345\244\247\344\275\234\344\270\232.md" deleted file mode 100644 index 89f2f536c8d1d118459583a62933c40ac124fa60..0000000000000000000000000000000000000000 --- "a/04 \346\235\216\346\230\216\345\201\245/\345\244\247\344\275\234\344\270\232.md" +++ /dev/null @@ -1,123 +0,0 @@ -~~~ sql -create database xiaoshuo charset utf8; -use xiaoshuo; - -# 作家信息表 -create table author( - author_id int primary key, - author_name varchar(20) unique key not null, - credits int, - vip_id varchar(20), - foreign key(vip_id) references vip(vip_id) -); - - -#作家等级信息表 -create table vip( - vip_id varchar(20) primary key, - vip_name varchar(20) not null unique key -); - - -# 小说作品信息表 -create table story( - story_id int primary key auto_increment, - author_id int, - type_id varchar(20), - story_name varchar(50), - views_number int, - foreign key(author_id) references author(author_id), - foreign key(type_id) references type(type_id) -); - - -# 小说作品类型表 -create table type( - type_id varchar(20) primary key, - type_name varchar(20) not null unique key -); - - -insert into author values -(1001,'朱逸群',600,'VIP02'), -(1002,'范建',8510,'VIP04'), -(1003,'史珍香',981,'VIP02'), -(1004,'范统',2364,'VIP02'), -(1005,'杜子腾',257,'VIP01'), -(1006,'刘产',678,'VIP02'), -(1007,'杜琦燕',438,'VIP03'); - - -insert into vip values -('vip01','青铜作家'), -('vip02','白银作家'), -('vip03','黄金作家'), -('vip04','钻石作家'); - - -insert into story (author_id,type_id,story_name,views_number) values -(1002,'L03','母猪产后与护理师的二三事',6541), -(1005,'L04','拖拉机大战蜘蛛侠',563), -(1003,'L01','这只小龙虾不正经',8754), -(1006,'L04','一个爹爹三个娃',36354), -(1006,'L01','皇上滚开本宫只劫财',3674), -(1005,'L05','给长城贴瓷砖的小太监',6541), -(1003,'L03','不科学御兽',1257), -(1005,'L01','镜面管理局',3216), -(1004,'L02','关于我成为灭魂师之后',3216), -(1004,'L05','公子别秀',2078); - - -insert into type values -('L01','玄幻'), -('L02','奇幻'), -('L03','武侠'), -('L04','仙侠'), -('L05','都市'); - --- 所有题目要求使用SQL语句完成 - select * from author; --- 1. 根据前面提供的表结构和表数据,创建数据库并分别创建这张四张表;并插入相关数据。(提醒:外键请注意建表顺序和插入数据的顺序) (30分) --- 2. 将story 表中的story_name字段类型改成varchar(40) 。(2分) - alter table story modify story_name varchar(40); --- 3. 在author表中增加一个性别字段 字段名:author_sex,类型: char(10),要求默认值为'男'。 (3分) - alter table author add author_sex char(10) default '男'; --- 4. 将作家编号为1005、1007的作家性别改为'女' 。(2分) - update author set author_sex ='女' where author_id in(1005,1007); --- 5.作家杜子腾,写了一篇名为《拜登夸我很帅》的都市小说,有854个浏览量,请将这条信息插入到story表。(3分) - insert into story (author_id,type_id,story_name,views_number) values(1005,'L05','拜登夸我很帅',854); --- 6. 《拖拉机大战蜘蛛侠》这篇小说,浏览量涨了100,请更新story表中的相关数据。(2分) - update story set views_number=views_number+100 where story_name='拖拉机大战蜘蛛侠'; --- 7. 请删除story表的中《皇上滚开本宫只劫财》这篇小说相关数据。(2分) - delete from story where story_name='皇上滚开本宫只劫财'; --- 8. 查询 浏览量大于 8000的小说的作者编号和小说作品名称。(2分) - select author_id,story_name from story where views_number>8000; --- 9. 查询积分大于1000 并且会员等级高于vip03的作家所有信息。(3分) - select * from author where credits>1000 and vip_id>'vip03'; --- 10. 查询姓名以杜字开头的作家的姓名,积分和等级编号。(3分) - select author_name,credits,vip_id from author where author_name like('杜%'); --- 11. 查询积分在100、1000之间的作家信息,以积分降序排列。 (3分) - select * from author where credits between 100 and 1000 order by credits desc; --- 12. 查询出小说的总浏览量,最高浏览量,最小浏览量,平均浏览量,给字段用上中文别名。(3分) - select sum(views_number) 总浏览量,max(views_number) 最高浏览量,min(views_number) 最小浏览量, avg(views_number) 平均浏览量 from story; --- 13. 查询各种等级的作家的平均积分和作家数量,并对查询结果使用中文别名。(3分) - select avg(credits) 平均积分,count(author_id) 作家数量 from author group by vip_id; --- 14. 查询小说数量大于等于2的分类编号和小说数量。(4分) - select author_id,count(author_id) a from story group by author_id having a >= 2; --- 15. 查询所有小说中浏览量最少的书的作品编号、作品名称和类型编号、浏览量。(4分) - select type_id,story_name,views_number from story where views_number =(select min(views_number) from story); --- 16. 查询积分比刘产高的作者所有信息。(5分) - select * from author where credits > - (select credits from author where author_name ='刘产'); --- 17. 查询出哪些白银作家是没有写小说的,显示这些作家的姓名、等级名称。(8分) - select author_name ,vip_name from author a right join vip v on a.vip_id=v.vip_id where author_id= - (select vip.author_id from story s right join - (select vip_name,author_id from vip v left join author a on v.vip_id=a.vip_id where vip_name='白银作家') vip on s.author_id=vip.author_id where story_id is null); --- 18. 找出写过作品浏览量大于5000的作家的所有作品中浏览量不到1000的作品信息(8分) - select * from story where author_id in - (select s.author_id from author a right join story s on a.author_id=s.author_id where views_number > 5000) and views_number < 1000; --- 19. 查询所有小说的小说编号、小说名称、浏览量、分类名称、作者姓名、作者积分、作者等级名称,结果 --- 字段要用中文别名,并按浏览量降序排列,如果浏览量一样的,再按积分降序排列。(10分 - select t.type_id 小说编号,story_name 小说名称,views_number 浏览量, type_name 分类名称,author_name 作者姓名,credits 作者积分,vip_name 作者等级名称 from author a,story s,vip v,type t where a.author_id=s.author_id and a.vip_id=v.vip_id and t.type_id=s.type_id; -~~~ - diff --git "a/04 \346\235\216\346\230\216\345\201\245/\345\255\220\346\237\245\350\257\242.md" "b/04 \346\235\216\346\230\216\345\201\245/\345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index b2ff32071fd67ae7ac0f3178144a98fd02b9e0e9..0000000000000000000000000000000000000000 --- "a/04 \346\235\216\346\230\216\345\201\245/\345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,264 +0,0 @@ -### 7大字句 - -1. from : 从哪些表中筛选 -2. on : 关联多表查询时,去除笛卡尔积 -3. where : 从表中筛选的条件 -4. group by : 分组依据 -5. having:在统计结果中再次筛选 -6. order by: 排序 -7. limit:分页 - -必须按照(1)~(7)的顺序 编写字句 - -**from字句** - -```mysql -# 1.from 语句 -select * -from t_employee; -``` - -**on字句** - -```sql --- (1) on 必须配合 join 使用 --- on 后面只写关联条件 --- 所谓的关联条件 是俩表的关联字段的关系 --- 有n张表关联,就有n-1个关联条件 --- 两张表关联,就有1个关联条件 --- 三张表关联,就有2个关联条件 -SELECT * -FROM t_employee INNER JOIN t_department -ON t_employee.did = t_department.did; -``` - -**where语句** - -```sql -# where 子句 在查询结果中筛选 -SELECT * -FROM t_employee INNER JOIN t_department -ON t_employee.did = t_department.did -WHERE gender = '女'; -``` - -**group by** - -```sql -group by -- 分组 -``` - -**having语句** - -```sql -/*having子句也写条件 -where的条件是针对原表中的记录的筛选。where后面不能出现分组函数。 -having子句是对统计结果(分组函数计算后)的筛选。having可以加分组函数。 -*/ -``` - -**limit语句** - -```sql -/*limit子句是用于分页显示结果。 -limit m,n -n:表示最多该页显示几行 -m:表示从第几行开始取记录,第一个行的索引是0 -m = (page-1)*n page表示第几页*/ -``` - -### 子查询 - -子查询 就是嵌套在一个SQL 语句中的查询 SELECT语句可以嵌套在另一个SELECT中,UPDATE,DELETE,INSERT,CREATE语句等。 - -#### select的where或HAVing中嵌套子查询 - -当子查询结果作为外层另一个SQL的过滤条件,通常把子查询嵌入到WHERE或HAVING中。根据子查询结果的情况,分为如下三种情况。 - -+ 单列 单个值 可以直接使用比较运算符如 < > <= >= = != 等于子查询结果进行比较 -+ 子查询结果为单列 多个值 直接 用 IN 或者 NOT IN -+ 单列 单个值 可以直接使用比较运算符如 < > <= >= = != 等于子查询结果进行比较 还可以 搭配 any 、some 、all 等关键字与查询结果进行比较 - -```sql -/*在where或having后面的子查询结果是: -(1)单个值,那么可以用=,>,<,>=,<=,!=这样的运算符和子查询的结果做比较 -(2)多个值,那么需要用in,not in, >all,>any....形式做比较 - 如“<”、“<=”、“>”、“>=”、“=”、“!=”等搭配ANY、SOME、ALL等关键字与查询结果进行比较*/ -``` - -**SELECT中的EXISTS型子查询** - -EXISTS型子查询也是存在外层SELECT的WHERE子句中,不过它和上面的WHERE型子查询的工作模式不相同,所以这里单独讨论它。 - -如果EXISTS关键字后面的参数是一个任意的子查询,系统将对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS的结果为false,此时外层查询语句不进行查询。EXISTS和NOT EXISTS的结果只取决于是否返回行,而不取决于这些行的内容,所以这个子查询输入列表通常是无关紧要的。 - -如果EXISTS关键字后面的参数是一个关联子查询,即子查询的WHERE条件中包含与外层查询表的关联条件,那么此时将对外层查询表做循环,即在筛选外层查询表的每一条记录时,都看这条记录是否满足子查询的条件,如果满足就再用外层查询的其他WHERE条件对该记录进行筛选,否则就丢弃这行记录。 - -**SELECT的FROM中嵌套子查询** - -当子查询结果是多列的结果时,通常将子查询放到FROM后面,然后采用给子查询结果取别名的方式,把子查询结果当成一张“动态生成的临时表”使用。 - -作业 - -~~~ sql -create database ZyClass2 charset utf8; -use ZyClass2; -create table stuinfo( - stuNO varchar(10) primary key, - stuName varchar(5), - stuSex varchar(2), - stuAge int , - stuAddress varchar(10), - stuSeat int -); - -create table stuExam( - examNO int auto_increment primary key, - stuNO varchar(10) , - writtenExam int, - labExam int, - constraint sn foreign key(stuno) references stuinfo(stuno) -); - -create table stuMarks( - examNo int , - stuID varchar(10), - score int, - constraint en foreign key(examno) references stuexam(examno) -); - -insert into stuinfo values -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'湖北武汉',2), -('s2503','马文才','男',18,'湖南长沙',3), -('s2504','欧阳俊雄','女',21,'湖北武汉',4), -('s2505','梅超风','男',16,'湖北武汉',5), -('s2506','陈旋风','男',19,'美国硅谷',6); - - -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); - - -insert into stumarks values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); - --- 在如图的数据表上完成以下题目 - --- 1.查询出年龄比班上平均年龄大的学生的信息 - select * from stuinfo where stuage > (select avg(stuage) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) - select i.stuno,stuName,stusex,m.sc - from - stuinfo i,(select stuid, max(score) sc from stumarks group by stuid) m - where i.stuNO=m.stuID ; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) - select si.stuNO,stuname,stusex,round((avg(se.writtenExam+se.labExam)/2),2) 平均值 - from - stuinfo si,stuexam se - where si.stuNO=se.stuNO group by stuno; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) - - #普通查询 - select * - from - stuinfo - where stuSex='男' and stuage >='20'; - - #子查询 - select * - from - (select *from stuinfo where stuSex='男') s - where stuage >='20'; - --- 5.查询出年龄比所有男生年龄都大的女生的信息 - select * - from - stuinfo - where - stuage > all (select stuage from stuinfo where stuSex='男') and stuSex='女'; --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) - select distinct si.* - from - stuinfo si right join stumarks sm on si.stuNO=sm.stuID - where - stuno != (select stuid from stumarks where score<60) ; --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - - #方法一:表连接 - select distinct si.* - from - stuinfo si right join stumarks sm - on si.stuNO=sm.stuID; - - #方法二:in - select * - from - stuinfo - where - stuno in(select distinct stuid from stumarks); - --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - - #方法一:表连接 - select si.* - from - stuinfo si left join stumarks sm - on si.stuNO=sm.stuID - where - stuno != all (select distinct stuid from stumarks); - - #方法二:in - select * - from - stuinfo si left join stumarks sm - on si.stuNO=sm.stuID - where - stuno not in(select distinct stuid from stumarks); - --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) - select * - from - stuinfo where stuno - in - (select stuid from stumarks where score >'90'); --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) - select * from stuinfo where stuno = - (select stuid from - (select stuid, avg(score) a from stumarks group by stuid) s where a>80); --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) - select si.* - from - stuinfo si left join stuexam se - on si.stuno = se.stuno - where - se.writtenexam > (select writtenexam from stuexam where stuno = 's2501') - and se.labexam > (select labexam from stuexam where stuno = 's2501'); --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) - select distinct si.* - from - stuinfo si right join stumarks sm on si.stuno=sm.stuID - where score > any - (select score from stuinfo si right join stumarks sm on si.stuno=sm.stuID where stuname='张秋利') and stuno != 's2501'; --- 13.查询班上比所有男生年龄都要大的女生的信息 - select * - from stuinfo - where stuage > all - (select stuage from stuinfo where stusex='男') and stusex='女'; --- 14.查询出只要比某个男生年龄大的女生的信息 - select * - from stuinfo - where stuage > any - (select stuage from stuinfo where stusex='男') and stusex='女'; -~~~ - diff --git "a/04 \346\235\216\346\230\216\345\201\245/\346\237\245\350\257\242\344\275\234\344\270\232.md" "b/04 \346\235\216\346\230\216\345\201\245/\346\237\245\350\257\242\344\275\234\344\270\232.md" deleted file mode 100644 index 2caf2cd1ccde66a5fb6b04b5036e92dd0f489f64..0000000000000000000000000000000000000000 --- "a/04 \346\235\216\346\230\216\345\201\245/\346\237\245\350\257\242\344\275\234\344\270\232.md" +++ /dev/null @@ -1,133 +0,0 @@ -~~~ sql -create database class2 charset utf8; -use class2; - -CREATE TABLE `student` ( - `Sno` varchar(20) NOT NULL, - `Sname` varchar(20) NOT NULL, - `Ssex` varchar(20) NOT NULL, - `Sbirthday` datetime DEFAULT NULL, - `Class` varchar(20) DEFAULT NULL, - PRIMARY KEY (`Sno`), - KEY `Sname` (`Sname`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE `course` ( - `Cno` varchar(20) NOT NULL, - `Cname` varchar(20) NOT NULL, - `Tno` varchar(20) NOT NULL, - PRIMARY KEY (`Cno`), - KEY `Tn` (`Tno`), - KEY `Cname` (`Cname`), - KEY `Cno` (`Cno`,`Tno`), - CONSTRAINT `Tn` FOREIGN KEY (`Tno`) REFERENCES `teacher` (`Tno`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE `score` ( - `Sno` varchar(20) NOT NULL, - `Cno` varchar(20) NOT NULL, - `Degree` decimal(4,1) DEFAULT NULL, - KEY `Sn` (`Sno`), - KEY `Cn` (`Cno`), - CONSTRAINT `Cn` FOREIGN KEY (`Cno`) REFERENCES `course` (`Cno`), - CONSTRAINT `Sn` FOREIGN KEY (`Sno`) REFERENCES `student` (`Sno`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE `teacher` ( - `Tno` varchar(20) NOT NULL, - `Tname` varchar(20) NOT NULL, - `Tsex` varchar(20) NOT NULL, - `Tbirthday` datetime DEFAULT NULL, - `Prof` varchar(20) DEFAULT NULL, - `Depart` varchar(20) NOT NULL, - PRIMARY KEY (`Tno`), - KEY `Depart` (`Depart`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -insert into Student values -(108,'曾华','男','1977-9-1',95033), -(105,'匡明','男','1975-10-2',95031), -(107,'王丽','女','1976-1-23',95033), -(101,'李军','男','1976-2-20',95033), -(109,'王芳','女','1975-2-10',95031), -(103,'陆君','男','1974-6-3',95031); - -insert into course values -(3-105,'计算机导论',825), -(3-245,'操作系统',804), -(6-166,'数字电路',856), -(9-888,'高等数学',831); - -insert into score values -(103,'3-245',86), -(105,'3-245',75), -(109,'3-245',68), -(103,'3-105',92), -(105,'3-105',88), -(109,'3-105',76), -(101,'3-105',64), -(107,'3-105',91), -(108,'6-180',78), -(101,'6-180',85), -(107,'6-166',79), -(108,'6-166',81); - -insert into teacher values -(804,'李诚','男','1958-12-2','副教授','计算机系'), -(856,'张旭','男','1969-3-12','讲师','电子工程系'), -(825,'王萍','女','1972-5-5','助教','计算机系'), -(831,'刘冰','女','1958-12-2','助教','电子工程系'); - -#1.查询所有学生,都学了哪些课程,要显示学生信息和课程信息 - select * from student,course,score where score.cno = course.Cno and student.sno=score.sno; -#2.查询没有学生的教师的所有信息 - select * from teacher where depart='电子工程系'; -#① 查询Score表中的最高分的学生学号和课程号。 - select sno,cno from score where degree='91'; -#② 查询所有学生的Sname、Cno和Degree列。 - select student.sname,course.cno,score.degree from student, course, score where score.cno = course.Cno and student.sno=score.sno ; -#③ 查询所有学生的Sno、Cname和Degree列。 - select student.Sno,course.cname,score.degree from student, course, score where score.cno = course.Cno and student.sno=score.sno ; -#④ 查询所有学生的Sname、Cname和Degree列。 - select student.sname,course.cname,score.degree from student, course, score where score.cno = course.Cno and student.sno=score.sno ; -#⑤ 查询“95033”班学生的平均分。 - select avg(degree) from score,student where student.sno=score.sno and student.class='95033'; -#⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 - select * from student,score where cno='3-105' and Degree>76 and student.sno=score.sno; - select * from score; -#⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 - -#⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 - select * from student,score where degree>76 and cno='3-105' and student.sno=score.sno; -#⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 - select sno,sname,Sbirthday from student where Sbirthday='1977-9-1'; -#⑩ 查询“张旭“教师任课的学生成绩。 - select sname,cname,degree from student,score,teacher,course where tname='张旭' and student.sno=score.sno and score.cno = course.Cno and teacher.Tno=course.Tno; -#⑪ 查询选修某课程的同学人数多于5人的教师姓名。 - #select tname,count(cno) a from score,teacher, student,course where a>=5 ; -#⑫ 查询出“计算机系“教师所教课程的成绩表。 - select degree,depart from score LEFT JOIN teacher on depart='计算机系' ; -#⑬ 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 - -#⑭ 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 - -#⑮ 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. - -#⑯ 查询成绩比该课程平均成绩低的同学的成绩表。 - -#⑰ 查询所有任课教师的Tname和Depart. - -#⑱ 查询所有未讲课的教师的Tname和Depart. - -#⑲ 查询“男”教师及其所上的课程。 - -#⑳ 查询最高分同学的Sno、Cno和Degree列。 - -#21 查询和“李军”同性别的所有同学的Sname. - -#22 查询和“李军”同性别并同班的同学Sname. - -#23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 - -~~~ - diff --git "a/04 \346\235\216\346\230\216\345\201\245/\347\272\246\346\235\237.md" "b/04 \346\235\216\346\230\216\345\201\245/\347\272\246\346\235\237.md" deleted file mode 100644 index e9ae599630987a3f7359b3782fcf49dad21ac319..0000000000000000000000000000000000000000 --- "a/04 \346\235\216\346\230\216\345\201\245/\347\272\246\346\235\237.md" +++ /dev/null @@ -1,297 +0,0 @@ -## 约束 :主键、唯一、非空、默认、自增、外键 - -### 1 主键约束 - -​ 关键字:primary key - -​ 特点:每一个表只能有一个主键约束。主键约束的字段值是不允许为null,也不允许重复的 - -~~~ sql -create table teacher( - tid int primary key, - tname varchar(20) primary key #主键不允许重复定义,会报错 -); -insert into teachar values(1,'张三'); #重复执行会报错 -insert into teachar values(2,'李四'); -insert into teachar values(null,'李五'); #主键不允许为null,会报错 -insert into teachar values(1,'张五'); #主键不允许重复,会报错 -~~~ - -​ 复合主键 - -~~~ sql -create table xuanke( - sid int, - cid int, - score int, - primary key(sid,cid) #它俩的组合不能为NULL,并且唯一 -); -#此时可以重复 -insert into xuanke values(1,1,89); -insert into xuanke values(1,2,96); -insert into xuanke values(2,1,88); -insert into xuanke values(2,2,100); -~~~ - - - -​ 建表后增加主键约束 - -~~~ sql -alter table 表名称 add primary key(字段列表); -~~~ - -​ 如果想要删除主键约束 - -~~~sql -alter table 表名称 drop primary key; -~~~ - -​ 如果希望某个字段的值,是唯一的,但不要求非空,它也不是主键。 - -​ 就可以给这样的字段加唯一键约束 - -### 2 唯一键约束 - -​ 关键字:unique key - -​ 特点:允许为null,但是不能重复。一个表可以有多个唯一键约束 - -~~~ sql -create table student( - sid int primary key, - sname varchar(20), - birthday date, - score int, - gender enum('男','女'), - weight double(4,1), - tel char(11) unique key -); -insert into student(sid,sname,tel) values -(1,'张三',NULL), -(2,'李四','10086'); - -insert into student(sid,sname,tel) values -(3,'王五','10086'); - -~~~ - -​ 建表后增加唯一键约束 - -~~~ sql -alter table 表名称 add unique key(字段列表); -~~~ - -​ 如果要用语句删除唯一键约束 - -~~~ sql -alter table 表名称 drop index 索引号; -~~~ - -​ 如果某个字段,不要求唯一,但是要求非空。那么就可以给字段加非空约束。 - -### 3 非空约束 - -~~~ sql -CREATE TABLE student( - sid INT PRIMARY KEY, - sname VARCHAR(20), - birthday DATE, - score INT NOT NULL, - gender ENUM('男','女'), - weight DOUBLE(4,1), - tel CHAR(11) UNIQUE KEY -); -#score字段不能为空 -INSERT INTO student(sid,sname,tel) VALUES(3,'王五','10086'); -#正确代码 -INSERT INTO student(sid,sname,score,tel) VALUES(3,'王五',89,'10086'); -~~~ - -### 4 默认值约束 - -如果某个字段,在添加数据时未指定值时,希望不要用NULL处理,而是按照一个默认值处理, - -就可以使用默认值约束。 - -例如:学生性别,在未指定时,默认按照 男 处理 - -~~~ sql -CREATE TABLE student( - sid INT PRIMARY KEY, #主键约束 - sname VARCHAR(20) UNIQUE KEY, #唯一键约束 - birthday DATE, - score INT NOT NULL, #非空约束 - gender ENUM('男','女') NOT NULL DEFAULT '男', #非空 + 默认值约束 - weight DOUBLE(4,1), - tel CHAR(11) UNIQUE KEY #唯一键约束 -); -INSERT INTO student(sid,sname,score,tel) - VALUES(1,'张三',89,'10086'); -INSERT INTO student(sid,sname,score,gender,tel) - VALUES(2,'小翠',89,'女','10010'); - - #删除score的非空约束 - ALTER TABLE student MODIFY score INT; - #增加非空约束 - ALTER TABLE student MODIFY score INT NOT NULL; - #删除gender的默认值约束,保留非空约束 - ALTER TABLE student MODIFY gender ENUM('男','女') NOT NULL; - #删除gender的非空约束,保留默认值约束 - ALTER TABLE student MODIFY gender ENUM('男','女') DEFAULT '男'; - #保留非空和默认值约束 - ALTER TABLE student MODIFY gender ENUM('男','女') DEFAULT '男' NOT NULL; -~~~ - -### 5 检查约束 (MySQL5.7不支持CHECK约束,在MySQL8.0中开始支持CHECK约束) - -~~~ sql -CREATE TABLE student( - sid INT PRIMARY KEY, #主键约束 - sname VARCHAR(20) , - age INT CHECK (age>=18 && age<=35) -); -INSERT INTO student VALUES(1,'张三',25); -INSERT INTO student VALUES(2,'李四',45); -~~~ - -### 6 外键约束 - -约束两个表的关系,或者是一个表的两个字段之间的关系。 - -(1)主表(父表)和从表(子表) - -​ 主表:被依赖,被参考 - -​ 从表:依赖别人的,参考别人的 - -例如:员工表和部门表 - -​ 员工表中有一个部门编号字段,它的值是依赖于部门表的部门编号。 - -​ 员工表是从表。 - -​ 部门表示主表。 - -~~~ SQL -CREATE TABLE dept( - did INT PRIMARY KEY, - dname VARCHAR(20) -); -CREATE TABLE emp( - eid INT, - ename VARCHAR(20), - deptid INT, -#这里的部门编号可以和dept表中的部门编号名字不一样,但是数据类型和逻辑意义要一样 - FOREIGN KEY (deptid) REFERENCES dept(did) -); -#emp依赖于dept表 -~~~ - -### 7 自增属性 - -维护某个字段的值自动增长的一个属性。 - -它的要求: - -(1)一个表最多只能有一个字段是自增的 - -(2)自增的字段必须是整数类型 - -(3)自增的字段必须是键约束的字段(通常是主键、唯一键) - -​ 自增字段赋值为null和0的时候,会自增, - -​ 如果赋值为其他的值,按照你指定的值来。 - -~~~ sql -CREATE DATABASE mxdx; -USE mxdx; - -CREATE TABLE stu( - sid INT AUTO_INCREMENT PRIMARY KEY, - sname VARCHAR(20) -); -~~~ - -错误代码: 1075 - -Incorrect table definition; there can be only one auto column(只能是一个自动列) - - and(并且) it must be defined as a key(必须是键列) - -~~~ sql -INSERT INTO stu VALUES(NULL,'张三'); -INSERT INTO stu VALUES(NULL,'李四'); -INSERT INTO stu VALUES(0,'王五'); -INSERT INTO stu VALUES(-1,'赵六'); -INSERT INTO stu VALUES(8,'王八'); -INSERT INTO stu VALUES(NULL,'小九'); - -ALTER TABLE 表名称 AUTO_INCREMENT = 起始值; -ALTER TABLE stu AUTO_INCREMENT = 1001; - -INSERT INTO stu VALUES(NULL,'小十'); -INSERT INTO stu VALUES(NULL,'小十1'); - -SHOW CREATE TABLE stu; -~~~ - -### 作业 - -~~~ sql -#第一题答案 -create database test01_company charset utf8; -use test01_company; -create table offices( - officeCode int , - city varchar(30) , - address varchar(50) , - country varchar(50) , - postalCode varchar(25) -);create table employees( - empNum int(11), - lastName varchar(50), - firstName varchar(50) , - mobile varchar(25) , - `code` int , - jobTitle varchar(50), - birth date , - Note varchar(255), - Sex varchar(5) -); -alter table employees modify mobile varchar(25) after code; -alter table employees change birth birthday date; -alter table employees modify sex char(1); -alter table employees drop note; -alter table employees add favoriate_activity varchar(100); -alter table employees rename employees_info; - -#第二题答案 -create database test02db charset utf8; -use test02db; -create table pet( - name varchar(20) comment '宠物名称', - owner varchar(20) comment '宠物主人', - species varchar(20) comment '种类', - sex char(1) comment '性别', - birth year comment '出生日期', - death year comment '死亡时间' - ); - insert into pet(name,owner,species,sex,birth,death) -values('Fluffy','harold','Cat','f',2003,2010), -('Claws','gwen','Cat','m',2004,null), -('Buffy',null,' Dog','f',2009,null), -('Fang','benny',' Dog','m',2000,null), -('bowser','diane',' Dog','m',2003,2019), -('Chirpy',null,'Bird ','f',2008,null); -select * from pet; -alter table pet add owner_birth varchar(20); -update pet set owner='kevin' where name='Claws'; -update pet set owner='duck' where death=null; -select * from pet where owner is null; -select * from pet where death = 2010 or death = 2009; -select * from pet where death = null; -select * from pet; -~~~ - diff --git "a/06 \351\231\210\345\277\227\344\274\237/11\343\200\201DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" "b/06 \351\231\210\345\277\227\344\274\237/11\343\200\201DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" deleted file mode 100644 index d68455c53b04e1f19fa0e621757c0648b6d54bc0..0000000000000000000000000000000000000000 --- "a/06 \351\231\210\345\277\227\344\274\237/11\343\200\201DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" +++ /dev/null @@ -1,411 +0,0 @@ -## 第1题 - -1、创建数据库test01_market - -2、创建表格customers - -| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date | - -**要求3:**将c_contact字段移动到c_birth字段后面 - -**要求4:**将c_name字段数据类型改为 varchar(70) - -**要求5:**将c_contact字段改名为c_phone - -**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -**要求7:**将表名改为customers_info - -**要求8:**删除字段c_city - -```mysql --- 第1题 --- --- 1、创建数据库test01_market -create database test01_market; --- 2、创建表格customers -use test01_market; -create table customers( - c_num int(11), - c_name varchar(50), - c_contact varchar(50), - c_city varchar(50), - c_birth date -); --- | 字段名 | 数据类型 | --- | --------- | ----------- | --- | c_num | int(11) | --- | c_name | varchar(50) | --- | c_contact | varchar(50) | --- | c_city | varchar(50) | --- | c_birth | date | --- --- **要求3:**将c_contact字段移动到c_birth字段后面 -alter table customers modify c_contact varchar(50) after c_birth; --- **要求4:**将c_name字段数据类型改为 varchar(70) -alter table customers modify c_name varchar(70); --- **要求5:**将c_contact字段改名为c_phone -alter table customers change c_contact c_phone varchar(50); --- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -alter table customers add c_gender char(1) after c_name; --- **要求7:**将表名改为customers_info -alter table customers rename to customers_info; -show tables; --- **要求8:**删除字段c_city -desc customers_info; -alter table customers_info drop c_city; - -``` - -## 第2题 - -1、创建数据库test02_library - -2、创建表格books - -| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------- | -------- | ------------- | -------- | ---- | -| b_id | 书编号 | int(11) | 否 | 是 | -| b_name | 书名 | varchar(50) | 否 | 否 | -| authors | 作者 | varchar(100) | 否 | 否 | -| price | 价格 | float | 否 | 否 | -| pubdate | 出版日期 | year | 否 | 否 | -| note | 说明 | varchar(100) | 是 | 否 | -| num | 库存 | int(11) | 否 | 否 | - -3、向books表中插入记录 - -1) 指定所有字段名称插入第一条记录 - -2)不指定字段名称插入第二记录 - -3)同时插入多条记录(剩下的所有记录) - -| b_id | b_name | authors | price | pubdate | note | num | -| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -4、将小说类型(novel)的书的价格都增加5。 - -5、将名称为EmmaT的书的价格改为40。 - -6、删除库存为0的记录 - -```mysql --- ## 第2题 --- --- 1、创建数据库test02_library -create database test02_library; --- 2、创建表格books -use test02_library; -create table books( - b_id int(11), - b_name varchar(50), - authors varchar(100), - price float, - pubdate year, - note varchar(100), - num int(11) -); --- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | --- | ------- | -------- | ------------- | -------- | ---- | --- | b_id | 书编号 | int(11) | 否 | 是 | --- | b_name | 书名 | varchar(50) | 否 | 否 | --- | authors | 作者 | varchar(100) | 否 | 否 | --- | price | 价格 | float | 否 | 否 | --- | pubdate | 出版日期 | year | 否 | 否 | --- | note | 说明 | varchar(100) | 是 | 否 | --- | num | 库存 | int(11) | 否 | 否 | --- --- 3、向books表中插入记录 -insert into books values (1,'Tal of AAA','Dickes',23,1995,'novel',11); --- 1) 指定所有字段名称插入第一条记录 -insert into books(b_id,b_name,authors,price,pubdate,note,num) values (2,'EmmaT','Jane lura',35,1993,'joke',22); --- 2)不指定字段名称插入第二记录 -insert into books values (3,'Story of Jane','Jane Tim',40,2001,'novel',0); --- 3)同时插入多条记录(剩下的所有记录) -insert into books values (4,'Lovey Day','George Byron',20,2005,'novel',30), -(5,'Old land','Honore Blade',30,2010,'law',0), -(6,'The Battle','Upton Sara',30,1999,'medicine',40), -(7,'Rose Hood','Richard haggard',28,2008,'cartoon',28); -select * from books; --- | b_id | b_name | authors | price | pubdate | note | num | --- | ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | --- | 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | --- | 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | --- | 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | --- | 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | --- | 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | --- | 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | --- | 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | --- --- 4、将小说类型(novel)的书的价格都增加5。 -update books set price =(price+5) where note = 'novel'; --- 5、将名称为EmmaT的书的价格改为40。 -update books set price = 40 where b_name='EmmaT' --- 6、删除库存为0的记录 -delete from books where num=0; -``` - - - -## 第3题 - -1、创建数据库test03_bookstore - -2、创建book表 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| sales | int(11) | NO | | NULL | | -| stock | int(11) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------------+------------+-------+-------+-------+----------------------------+ -| id | title | author | price | sales | stock | img_path | -+----+-------------+------------+-------+-------+-------+-----------------------------+ -| 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | -| 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | -+----+---------------+------------+-------+-------+-------+----------------------------+ -``` - -3、创建用户表users,并插入数据 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| username | varchar(100) | NO | UNI | NULL | | -| password | varchar(100) | NO | | NULL | | -| email | varchar(100) | YES | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+----------+----------------------------------+--------------------+ -| id | username | password | email | -+----+----------+----------------------------------+--------------------+ -| 1 | admin | 112233 | admin@mxdx.com | -+----+----------+----------------------------------+--------------------+ -``` - -4、创建订单表orders - -```mysql -+--------------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+--------------+--------------+------+-----+---------+-------+ -| id | varchar(100) | NO | PRI | NULL | | -| order_time | datetime | NO | | NULL | | -| total_count | int(11) | NO | | NULL | | -| total_amount | double(11,2) | NO | | NULL | | -| state | int(11) | NO | | NULL | | -| user_id | int(11) | NO | MUL | NULL | | -+--------------+--------------+------+-----+---------+-------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----------------+---------------------+-------------+--------------+-------+---------+ -| id | order_time | total_count | total_amount | state | user_id | -+----------------+---------------------+-------------+--------------+-------+---------+ -| 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | -+----------------+---------------------+-------------+--------------+-------+---------+ -``` - -5、创建订单明细表order_items - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| count | int(11) | NO | | NULL | | -| amount | double(11,2) | NO | | NULL | | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -| order_id | varchar(100) | NO | MUL | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------+--------+---------+---------+-------+----------------+----------------+ -| id |count| amount| title | author | price | img_path | order_id | -+----+-------+--------+------------+----------+-------+----------------+----------------+ -| 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | -| 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | -+----+-------+--------+------------+----------+-------+------------+----------------+ -``` - -参考答案: - -```mysql --- ## 第3题 --- --- 1、创建数据库test03_bookstore -create database test03_bookstore; --- 2、创建book表 -use test03_bookstore; -create table book( - id int(11), - title varchar(100), - author varchar(100), - price double(11,2), - sales int(11), - stock int(11), - img_path varchar(100) -); -alter database test03_bookstore character set utf8; --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | sales | int(11) | NO | | NULL | | --- | stock | int(11) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- 尝试添加部分模拟数据,参考示例如下: --- +----+-------------+------------+-------+-------+-------+----------------------------+ --- | id | title | author | price | sales | stock | img_path | --- +----+-------------+------------+-------+-------+-------+-----------------------------+ --- | 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | --- | 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | --- +----+---------------+------------+-------+-------+-------+----------------------------+ -insert into book values (1,'zahuodian','zhuwu',27.20,102,98,'upload/books/jieyou.jpg'), -(2,'biancheng','shengcongwen',23.00,102,98,'upload/books/biancheng.jpg'); -select * from book; --- --- 3、创建用户表users,并插入数据 -create table users( - id int(11), - username varchar(100), - password varchar(100), - email varchar(100) -); --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | username | varchar(100) | NO | UNI | NULL | | --- | password | varchar(100) | NO | | NULL | | --- | email | varchar(100) | YES | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----+----------+----------------------------------+--------------------+ --- | id | username | password | email | --- +----+----------+----------------------------------+--------------------+ --- | 1 | admin | 112233 | admin@mxdx.com | --- +----+----------+----------------------------------+--------------------+ -insert into users values (1,'admin',112233,'admin@mxdx.com'); --- --- 4、创建订单表orders -create table orsers( - id varchar(100), - order_time datetime, - total_count int(11), - total_amount double(11,2), - state int(11), - user_id int(11) -); --- ```mysql --- +--------------+--------------+------+-----+---------+-------+ --- | Field | Type | Null | Key | Default | Extra | --- +--------------+--------------+------+-----+---------+-------+ --- | id | varchar(100) | NO | PRI | NULL | | --- | order_time | datetime | NO | | NULL | | --- | total_count | int(11) | NO | | NULL | | --- | total_amount | double(11,2) | NO | | NULL | | --- | state | int(11) | NO | | NULL | | --- | user_id | int(11) | NO | MUL | NULL | | --- +--------------+--------------+------+-----+---------+-------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | id | order_time | total_count | total_amount | state | user_id | --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | --- +----------------+---------------------+-------------+--------------+-------+---------+ --- ``` -insert into orsers values (15294258455691,'2018-06-20 00:30:45',2,50.20,0,1); --- 5、创建订单明细表order_items -create table order_items( - id int(11), - count int(11), - amount double(11,2), - title varchar(100), - author varchar(100), - price double(11,2), - img_path varchar(100), - order_id varchar(100) -); --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | count | int(11) | NO | | NULL | | --- | amount | double(11,2) | NO | | NULL | | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- | order_id | varchar(100) | NO | MUL | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----+-------+--------+---------+---------+-------+----------------+----------------+ --- | id |count| amount| title | author | price | img_path | order_id | --- +----+-------+--------+------------+----------+-------+----------------+----------------+ --- | 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | --- | 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | --- +----+-------+--------+------------+----------+-------+------------+----------------+ --- ``` --- -``` - diff --git "a/06 \351\231\210\345\277\227\344\274\237/2\343\200\201DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274.md" "b/06 \351\231\210\345\277\227\344\274\237/2\343\200\201DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274.md" deleted file mode 100644 index 111bf536797d65e6e108d4d3d0e96ae7ec0cdb31..0000000000000000000000000000000000000000 --- "a/06 \351\231\210\345\277\227\344\274\237/2\343\200\201DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274.md" +++ /dev/null @@ -1,399 +0,0 @@ -## 第1题 - -1、创建数据库test01_company - -2、创建表格offices - -| 字段名 | 数据类型 | -| ---------- | ----------- | -| officeCode | int | -| city | varchar(30) | -| address | varchar(50) | -| country | varchar(50) | -| postalCode | varchar(25) | - -3、创建表格employees - -| 字段名 | 数据类型 | -| ------------- | ---------------------------- | -| empNum | int(11) | -| lastName | varchar(50) | -| firstName | varchar(50) | -| mobile | varchar(25) | -| code | int | -| jobTitle | varchar(50) | -| birth | date | -| Note | varchar(255) | -| Sex | varchar(5) | - -**要求4:**将表employees的mobile字段修改到code字段后面。 - -**要求5:**将表employees的birth字段改名为birthday; - -**要求6:**修改sex字段,数据类型为char(1)。 - -**要求7:**删除字段note; - -**要求8:**增加字段名favoriate_activity,数据类型为varchar(100); - -**要求9:**将表employees的名称修改为 employees_info - -```mysql --- ## 第1题 --- --- 1、创建数据库 test01_company -create database test01_company; --- 2、创建表格 offices -use test01_company; -create table offices( - officeCode int, - city varchar(30), - address varchar(50), - country varchar(50), - postalCode varchar(25) -); --- | 字段名 | 数据类型 | --- | ---------- | ----------- | --- | officeCode | int | --- | city | varchar(30) | --- | address | varchar(50) | --- | country | varchar(50) | --- | postalCode | varchar(25) | --- --- 3、创建表格 employees -create table employees( - empNum int(11), - lastName varchar(50), - firstName varchar(50), - mobile varchar(25), - `code` int, - jobTitle varchar(50), - birth date, - Note varchar(255), - Sex varchar(5) -); --- | 字段名 | 数据类型 | --- | --------- | ------------- | --- | empNum | int(11) | --- | lastName | varchar(50) | --- | firstName | varchar(50) | --- | mobile | varchar(25) | --- | code | int | --- | jobTitle | varchar(50) | --- | birth | date | --- | Note | varchar(255) | --- | Sex | varchar(5) | --- --- **要求4:**将表employees的mobile字段修改到code字段后面。 -alter table employees modify mobile varchar(50) after code; --- **要求5:**将表employees的birth字段改名为birthday; -alter table employees change birth birthday date; --- **要求6:**修改sex字段,数据类型为char(1)。 -alter table employees modify sex char(1); --- **要求7:**删除字段note; -alter table employees drop note; --- **要求8:**增加字段名 favoriate_activity,数据类型为varchar(100); -alter table employees add favoriate_activity varchar(100); --- **要求9:**将表employees的名称修改为 employees_info -alter table employees rename employees_info; -``` - - - -## 第2题 - -1、创建数据库test02db - -2、创建表格pet - -| 字段名 | 字段说明 | 数据类型 | -| ------- | -------- | ----------- | -| name | 宠物名称 | varchar(20) | -| owner | 宠物主人 | varchar(20) | -| species | 种类 | varchar(20) | -| sex | 性别 | char(1) | -| birth | 出生日期 | year | -| death | 死亡日期 | year | - -3、添加记录 - -| name | owner | species | sex | birth | death | -| ------ | ------ | ------- | ---- | ----- | ----- | -| Fluffy | harold | Cat | f | 2003 | 2010 | -| Claws | gwen | Cat | m | 2004 | | -| Buffy | | Dog | f | 2009 | | -| Fang | benny | Dog | m | 2000 | | -| bowser | diane | Dog | m | 2003 | 2009 | -| Chirpy | | Bird | f | 2008 | | - -4、 添加字段主人的生日owner_birth。 - -5、 将名称为Claws的猫的主人改为kevin - -6、 将没有死的狗的主人改为duck - -7、 查询没有主人的宠物的名字; - -8、 查询已经死了的cat的姓名,主人,以及去世时间; - -9、 删除已经死亡的狗 - -10、查询所有宠物信息 - -```mysql --- ## 第2题 --- --- 1、创建数据库 test02db -create database test02db; --- 2、创建表格pet -use test02db; -create table pet( - name varchar(20), - owner varchar(20), - species varchar(20), - sex char(1), - birth year, - death year -); --- | 字段名 | 字段说明 | 数据类型 | --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | --- --- 3、添加记录 -insert into pet values -('Fluffy','harold','Cat','f',2003,2010), -('Claws','gwen','Cat','m',2004,null), -('Buffy',null,'Dog','f',2009,null), -('Fang','benny','Dog','m',2000,null), -('bowser','diane','Dog','m',2003,2009), -('Chirpy',null,'Bird','f',2008,null); - --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | --- --- 4、 添加字段主人的生日 owner_birth。 -alter table pet add owner_birth date; --- 5、 将名称为Claws的猫的主人改为kevin -update pet set name = 'kevin' where name = 'Claws'; -insert into pet(owner) values (gwen) where name='kevin'; --- 6、 查询没有主人的宠物的名字; -select species from pet where owner = name is null; --- 7、 将没有死的狗的主人改为duck -update pet set owner = 'duck' where death =name is null; --- 8、 查询已经死了的cat的姓名,主人,以及去世时间; -select `name`,`owner`,death from pet where death = name is not null and species = 'cat'; --- 9、 删除已经死亡的狗 -delete from pet where death = name is not null and species = 'dog'; --- 10、查询所有宠物信息 -select * from pet; -``` - - - -```sql - -``` - -## 第3题 - -1、创建数据库:test03_company - -```sql -create database test03_company charset utf8; -``` - -2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - -A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - -```mysql -use test03_company ; -create table department( - depid int primary key auto_increment, - depname char(10) not null unique key, - deinfo varchar(200) -) -``` - -B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - -* ​ 雇员编号为主键; -* ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); -* ​ 性别默认为男; - -```mysql -create table employee ( - empid int primary key auto_increment, - name varchar(10) not null, - sex enum('男','女') not null default '男', - title varchar(10), - birthday date, - depid int foreign key references department(depid) -) -``` - -C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - -3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) - -4、添加数据如下: - -部门表: - -| 部门编号 | 部门名称 | 部门简介 | -| -------- | -------- | ------------ | -| 111 | 生产部 | Null | -| 222 | 销售部 | Null | -| 333 | 人事部 | 人力资源管理 | - - 雇员表: - -| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | -| -------- | ---- | ---- | ---------- | ---------- | ------------ | -| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | -| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | -| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | -| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | - - 工资表: - -| 雇员编号 | 基本工资 | 职务工资 | 扣除 | -| -------- | -------- | -------- | ---- | -| 1001 | 2200 | 1100 | 200 | -| 1002 | 1200 | 200 | NULL | -| 1003 | 2900 | 700 | 200 | -| 1004 | 1950 | 700 | 150 | - - - -## 第4题 - -1、创建一个数据库:test04_school - -2、创建如下表格 - -表1 Department表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | -| DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | -| DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | - -表2 Teacher表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| Number | 教工号 | int | 是 | 否 | 是 | 是 | -| Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | -| Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | -| Birth | 出生日期 | date | 否 | 否 | 否 | 否 | -| DepNo | 部门号 | int | 否 | 是 | 否 | 否 | -| Salary | 工资 | float | 否 | 否 | 否 | 否 | -| Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | - -3、添加记录 - -| **DepNo** | **DepName** | **DepNote** | -| --------- | ----------- | ------------------ | -| 601 | 软件技术系 | 软件技术等专业 | -| 602 | 网络技术系 | 多媒体技术等专业 | -| 603 | 艺术设计系 | 广告艺术设计等专业 | -| 604 | 管理工程系 | 连锁经营管理等专业 | - -| **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | -| ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | -| 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | -| 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | -| 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | -| 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | -| 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | - -4、用SELECT语句查询Teacher表的所有记录。 - -```mysql --- ## 第4题 --- --- 1、创建一个数据库:test04_school -drop database test04_school; -create database test04_school default character set utf8; --- 2、创建如下表格 -use test04_school; --- 表1 Department 表的定义 -drop table Department; -create table Department( - DepNo int(10) primary key not null unique key comment '部门号', - DepName varchar(20) not null comment '部门名称', - DepNote varchar(50) comment '部门备注' -); --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | --- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | --- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | --- --- 表2 Teacher 表的定义 - -create table Teacher( - Number int primary key not null unique key comment '教工号', - Name varchar(30) not null comment '姓名', - Sex varchar(4) comment '性别', - Birth date comment '出生日期', - DepNo int comment '部门号', - Salary float comment '工资', - Address varchar(100) comment '家庭住址', - foreign key (DepNo) references Department (DepNo) -); --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | Number | 教工号 | int | 是 | 否 | 是 | 是 | --- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | --- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | --- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | --- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | --- | Salary | 工资 | float | 否 | 否 | 否 | 否 | --- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | --- --- 3、添加记录 -insert into Department values(601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'), -(603,'艺术设计系','广告艺术设计等专业'),(604,'管理工程系','连锁经营管理等专业'); --- | **DepNo** | **DepName** | **DepNote** | --- | --------- | ----------- | ------------------ | --- | 601 | 软件技术系 | 软件技术等专业 | --- | 602 | 网络技术系 | 多媒体技术等专业 | --- | 603 | 艺术设计系 | 广告艺术设计等专业 | --- | 604 | 管理工程系 | 连锁经营管理等专业 | -desc Teacher; -insert into Teacher values -(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'), -(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'), -(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'), -(2004,'James','女','1980-10-20',602,3500,'四川省成都市'), -(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); --- | **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | --- | ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | --- | 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | --- | 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | --- | 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | --- | 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | --- | 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | --- --- 4、用SELECT语句查询Teacher表的所有记录。 -select * from Teacher; -``` - - - - - diff --git "a/06 \351\231\210\345\277\227\344\274\237/\344\275\234\344\270\232.md" "b/06 \351\231\210\345\277\227\344\274\237/\344\275\234\344\270\232.md" deleted file mode 100644 index da2a7a56e8e38ae1af60586a2155f1615aa286a7..0000000000000000000000000000000000000000 --- "a/06 \351\231\210\345\277\227\344\274\237/\344\275\234\344\270\232.md" +++ /dev/null @@ -1,80 +0,0 @@ -``` mysql -create database student charset utf8; -use student; -create table stuinfo( - stuNO varchar(10) primary key, - stuName varchar(10) not null, - stuSex enum('男','女') not null, - stuAge int(11), - stuAddress varchar(10), - stuSeat int -); -create table stuExam( - examNO int primary key, - stuNO varchar(10) not null, - writtenExam int, - labExan int, - foreign key (stuNO) references stuinfo (stuNO) -); -create table stuMarks( - examNO int primary key, - stuID varchar(10), - score int, - foreign key (examNO) references stuExam(examNO) -); -insert into stuinfo values -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'湖北武汉',2), -('s2503','马文才','男',18,'湖南长沙',3), -('s2504','欧阳俊雄','女',21,'湖北武汉',4), -('s2505','梅超风','男',16,'湖北武汉',5), -('s2506','陈旋风','男',19,'美国硅谷',6); -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); -insert into stuMarks values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); --- 1.查询出年龄比班上平均年龄大的学生的信息 -select * from stuinfo where stuage > (select avg(stuage) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -select stuno,stuname,stusex,max(score) from -(select a.stuno,stuname,stusex,examNO from stuinfo a left join stuExam b on a.stuNO = b.stuNO) a left join stuMarks d on a.examNO=d.examNO group by stuID; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -select a.stuno,stuname,stusex,(writtenExam+labExan)/2 from stuinfo a left join stuExam b on a.stuNO = b.stuNO; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -select * from stuinfo where stusex='男' and stuage>=20; -select * from stuinfo where stuname in (select stuname from stuinfo where stusex='男' and stuage>=20); --- 5.查询出年龄比所有男生年龄都大的女生的信息 -select * from stuinfo where stusex='女' and stuage> (select max(stuage) from stuinfo where stusex='男'); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -select * from -(select a.*,examno from stuinfo a left join stuExam b on a.stuNO = b.stuNO) a left join stuMarks b on a.examNO=b.examNO where score>=60; --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select a.*,writtenexam,labexan from stuinfo a left join stuExam b on a.stuNO=b.stuNO where a.stuno in (select stuid from stuMarks group by stuID); --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select a.*,writtenexam,labexan from stuinfo a left join stuExam b on a.stuNO=b.stuNO where a.stuno not in (select stuid from stuMarks group by stuID); --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -select * from -(select a.*,examNO from stuinfo a left join stuExam b on a.stuNO = b.stuNO) a left join stuMarks d on a.examNO=d.examNO where score > 90; --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -select stuno,stuname,stusex,max(score) zuigao from -(select a.stuno,stuname,stusex,examNO from stuinfo a left join stuExam b on a.stuNO = b.stuNO) a left join stuMarks d on a.examNO=d.examNO group by stuID having zuigao > 80; --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) - --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) - --- 13.查询班上比所有男生年龄都要大的女生的信息 -select * from stuinfo where stusex='女' and stuage> (select max(stuage) from stuinfo where stusex='男'); --- 14.查询出只要比某个男生年龄大的女生的信息 -select * from stuinfo where stusex='女' having stuage > any(select stuage from stuinfo where stusex='男'); -``` - diff --git "a/06 \351\231\210\345\277\227\344\274\237/\344\275\234\344\270\2323_\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" "b/06 \351\231\210\345\277\227\344\274\237/\344\275\234\344\270\2323_\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" deleted file mode 100644 index f3f0f2cc969e6a5ce5965871eadb4176b2bc23e4..0000000000000000000000000000000000000000 --- "a/06 \351\231\210\345\277\227\344\274\237/\344\275\234\344\270\2323_\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" +++ /dev/null @@ -1,275 +0,0 @@ -# 笔记 - -### 查询select - -select x+y;可以直接显示出相加的结果,例如select 1+1;显示出结果为2 - -select x=y;如果x=y会显示出true,如果x!=y则会显示出false - -select now();会显示当前时间 - -select查找用法:select * from 表名称;绝对路径,显示表内全部内容 - -#### 别名 - -select 字段名 [as] 别名 from 表名;给查询结果取别名,引号可以省略不写,as也可以省略不写 - -select 字段名 from 表名 [as] 别名;给表取别名,除了不能用引号其他和给字段取别名是一样的 - -#### 重复 - -distinct 去除重复 select distinct 字段名 from 表名称;可以去除字段里重复的,但只能在第一个字段前面 - -## 运算符 - -加+ - -减- - -乘* - -除/这个可以保留小数 div这个只能保留整数,没有四舍五入 - -模%就是求余数 - -大于> - -小于< - -大于等于>= - -小于等于<= - -等于= - -安全等于<=> - -区间范围内:between x and y;[x,y] - -区间范围外:!(条件 between x and y);或者not between x and y; - -集合范围内:in(x,y,x);在这范围内的数值 in(1,2,3) = 1 or = 2 or = 3 - -集合范围外:! (条件 in(x,y,x)); 或者 not in(x,y,x); - -#### 模糊查询 - -%:代表任意个字符:1,2,3,4..... - -_:代表一个字符,如果两个下划线就是代表两个字符 _ _ - -用法:select * from 表名称 where 条件 like '%查找的内容%'; - -select * from 表名称 where 条件 like '_查找的内容'; - -逻辑与:&& 或 and 并且 - -逻辑或:|| 或 or 或者 - -逻辑非:xor 两者只能满足一个条件,不能同时满足,也不能同时不满足 - -# 作业 - - - -## 第1题:员工表 - -```mysql -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - - - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - -**要求1:**查询出薪资在12000~13000之间的员工信息。 - -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -**要求3:**将“李四”的家庭住址改为“广东韶关” - -**要求4:**查询出名字中带“小”的员工 - -**要求5:**查询出薪资高于11000的男员工信息 - -**要求6:**查询没有登记电话号码的员工 - -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - -```mysql --- 第1题:员工表 -drop database employee; -create database employee charset utf8; --- | **id** | **name** | **sex** | **tel** | **addr** | **salary** | --- | ------ | -------- | ------- | ------------ | -------- | ---------- | --- | 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | --- | 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | --- | 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | --- | 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | --- | 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | -use employee; -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -) -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); --- **要求1:**查询出薪资在12000~13000之间的员工信息。 -select * from employee where salary between 12000 and 13000; --- **要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 -select id,name,addr from employee where name like '刘%'; --- **要求3:**将“李四”的家庭住址改为“广东韶关” -update employee set addr = '广东韶关' where name = '李四'; --- **要求4:**查询出名字中带“小”的员工 -select * from employee where name like '%小%'; --- **要求5:**查询出薪资高于11000的男员工信息 -select * from employee where salary>11000 and sex = '男'; --- **要求6:**查询没有登记电话号码的员工 -select * from employee where tel is null; --- **要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 -select * from employee where salary>12000 or addr='广东深圳' or addr like '%广州%' and sex = '男'; --- **要求8:**查询每个员工的年薪,显示“姓名、年薪” -select name 姓名,salary 年薪 from employee; -``` - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -``` - -**要求1:** 查询大国 的国家名称、人口和面积。 - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) - -- 人口至少为 2500 万(即 25000000) - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -**要求4:**查询国家名字中包含“o“字母的国家信息 - -**要求5:**查询GDP值超过10000000000的国家信息 - -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -```mysql --- ## 第2题:国家信息表 -create database ku charset utf8; --- countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 --- 表数据样例: --- +-------------+-----------+---------+------------+--------------+ --- | name | continent | area | population | gdp | --- +-------------+-----------+---------+------------+--------------+ --- | Afghanistan | Asia | 652230 | 25500100 | 20343000000 | --- | Albania | Europe | 28748 | 2831741 | 12960000000 | --- | Algeria | Africa | 2381741 | 37100000 | 188681000000 | --- | Andorra | Europe | 468 | 78115 | 3712000000 | --- | Angola | Africa | 1246700 | 20609294 | 100990000000 | --- +-------------+-----------+---------+------------+--------------+ -use ku; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); --- **要求1:** 查询大国 的国家名称、人口和面积。 --- 如果一个国家满足下述两个条件之一,则认为该国是 大国 : --- - 面积至少为 300万平方公里(即,3000000 km2) --- - 人口至少为 2500 万(即 25000000) -select name,population,area from countries_info where area >= 3000000 or population >=25000000; --- **要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 -select * from countries_info where continent = 'asia'; --- **要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 -select * from countries_info where area <10000 and population<100000; --- **要求4:**查询国家名字中包含“o“字母的国家信息 -select * from countries_info where !(name like '%o%'); --- **要求5:**查询GDP值超过10000000000的国家信息 -select * from countries_info where gdp > 10000000000; --- **要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” -select name 国家名,population 人口,gdp GDP值,gdp/population 人均贡献GDP值 from countries_info; --- **要求7:**查询人均贡献GDP值低于1000的国家信息。 -select * from countries_info where gdp/population<1000; --- **要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” -select name 国家名,area 面积,population 人口,area/population 人均国土面积 from countries_info; -``` - -​ diff --git "a/06 \351\231\210\345\277\227\344\274\237/\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/06 \351\231\210\345\277\227\344\274\237/\345\237\272\346\234\254\346\246\202\345\277\265.md" deleted file mode 100644 index f9fce3c62035eb903f98956667139e429e491fcf..0000000000000000000000000000000000000000 --- "a/06 \351\231\210\345\277\227\344\274\237/\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ /dev/null @@ -1,115 +0,0 @@ -### 基本概念 - -数据库是存储数据的地方“Database”简称Db - -数据库管理系统是一种操纵和管理数据库的大型软件“DataBase Management System”简称DBMS - -数据管理系统有MySQL、Oracle、SqlServer是一种操纵和管理数据库的大型软件 - -SQL是结构化查询语言"Structure Query Language",专门用来操作/访问数据库的通用语言。 - -根据数据库的分类,DBMS也分两大类: - -​ 一是关系型数据库管理系统 :MySQL , Oracle , SQL Server , SQLite , DB2 , ... - -​ 二是非关系型数据库管理系统:Redis , MongoDB , ... - -**关系型数据库**,采用关系模型来组织数据,简单来说,**关系模型指的就是二维表格模型**。类似于Excel工作表。 - -**非关系型数据库**,可看成传统关系型数据库的功能阉割版本,基于键值对存储数据,通过减少很少用的功能,来提高性能。 - -### 表的关系 - -MySQL是关系型数据库管理系统,而在关系数据库管理系统中,很多表之间是有关系的,表之间的关系分为一对一关系、一对多关系和多对多关系。 - -### 数据类型 - -#### 整数类型 - -​ 整数类型,MySQL还支持在类型名称后面加小括号(M),而小括号中的M表示显示宽度,M的取值范围是(0, 255)。int(M)这个M在字段的属性中指定了unsigned(无符号)和zerofill(零填充)的情况下才有意义。表示当整数值不够M位时,用0填充。如果整数值超过M位但是没有超过当前数据类型的范围时,就按照实际位数存储。当M宽度超过当前数据类型可存储数值范围的最大宽度时,也是以实际存储范围为准。 - -#### 小数类型 - -​ 浮点数有两种类型:单精度浮点数(FLOAT)和双精度浮点数(DOUBLE),定点数只有DECIMAL。浮点数和定点数都可以用(M,D)来表示。 - -​ 注意!!!(M是精度,表示该值总共显示M位,包括整数位和小数位,对于FLOAT和DOUBLE类型来说,M取值范围为0~255,而对于DECIMAL来说,M取值范围为0~65。D是标度,表示小数的位数,取值范围为0~30,同时必须<=M。) - -#### 字符串类型 - -MySQL的字符串类型有CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET等。MySQL的字符串类型可以用来存储文本字符串数据,还可以存储二进制字符串。 - -#### CHAR(M)为固定长度的字符串 - - CHAR(M)为固定长度的字符串,M表示最多能存储的字符数,取值范围是0~255个字符,如果未指定(M)表示只能存储1个字符。例如CHAR(4)定义了一个固定长度的字符串列,其包含的字符个数最大为4,如果存储的值少于4个字符,右侧将用空格填充以达到指定的长度,当查询显示CHAR值时,尾部的空格将被删掉。) - -#### VARCHAR(M)为可变长度的字符串 - -​ M表示最多能存储的字符数,最大范围由字符集及M共同决定 - -​ M不可缺省,必须指定(M),否则报错。 - -​ 实际长度达不到M值时,以实际长度为准。 - -​ VARBINARY类型的数据除了存储数据本身外,还需要1或2个字节来存储数据的字节数。 - -#### 日期时间类型 - -​ 如果仅仅是表示年份信息,可以只使用YEAR类型,这样更节省空间,格式为“YYYY”,例如“2022”。YEAR允许的值范围是1901~2155。 - -​ 如果要表示年月日,可以使用DATE类型,格式为“YYYY-MM-DD”,例如“2022-02-04”。 - -​ 如果要表示时分秒,可以使用TIME类型,格式为“HH:MM:SS”,例如“10:08:08”。 - -​ 如果要表示年月日时分秒的完整日期时间,可以使用DATATIME类型,格式为“YYYY-MM-DD HH:MM:SS”,例如“2022-02-04 10:08:08”。 - -​ 如果需要经常插入或更新日期时间为系统日期时间,则通常使用TIMESTAMP类型,格式为“YYYY-MM-DDHH:MM:SS”,例如“2022-02-04 10:08:08”。TIMESTAMP与DATETIME的区别在于TIMESTAMP的取值范围小,只支持1970-01-01 00:00:01 UTC至2038-01-19 03:14:07 UTC范围的日期时间值,其中UTC是世界标准时间,并且TIMESTAMP类型的日期时间值在存储时会将当前时区的日期时间值转换为时间标准时间值,检索时再转换回当前时区的日期时间值,这会更友好。而DATETIME则只能反映出插入时当地的时区,其他时区的人查看数据必然会有误差的。另外,TIMESTAMP的属性受MySQL版本和服务器SQLMode的影响很大。 - -#### Enum和Set类型 - - 无论是数值类型、日期类型、普通的文本类型,可取值的范围都非常大,但是有时候我们指定在固定的几个值范围内选择一个或多个,那么就需要使用ENUM枚举类型和SET集合类型了。 - -比如性别只有“男”或“女”;上下班交通方式可以有“地铁”、“公交”、“出租车”、“自行车”、“步行”等。 - -枚举和集合类型字段声明的语法格式如下: - -字段名ENUM(‘值1’,‘值2’,…‘值n’) - -字段名 SET(‘值1’,‘值2’,…‘值n’) - - -ENUM类型的字段在赋值时,只能在指定的枚举列表中取值,而且一次只能取一个。枚举列表最多可以有65535个成员。ENUM值在内部用整数表示,每个枚举值均有一个索引值, MySQL存储的就是这个索引编号。例如,定义ENUM类型的列(‘first’, ‘second’, ‘third’)。 - -#### 数据字段属性 - - **unsigned** - -- 无符号的 - -- 声明该数据列不允许负数 - - **ZEROFILL** - -- 0填充的 - -- 不足位数的用0来填充 , 如int(3),5则为005 - -**auto_increment** - -- 自动增长的 , 每添加一条数据 , 自动在上一个记录数上加 1(默认) -- 通常用于设置主键 , 且为整数类型 -- 可定义起始值和步长 - - 当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表 - - SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局) - -**NULL 和 NOT NULL** - -- 默认为NULL , 即没有插入该列的数值 -- 如果设置为NOT NULL , 则该列必须有值 - -**DEFAULT** - -- 默认的 - -- 用于设置默认值 - -- 例如,性别字段,默认为"男" , 否则为 "女" ; 若无指定该列的值 , 则默认值为"男"的值 diff --git "a/06 \351\231\210\345\277\227\344\274\237/\347\272\246\346\235\237.md" "b/06 \351\231\210\345\277\227\344\274\237/\347\272\246\346\235\237.md" deleted file mode 100644 index b06d1718f0ccd612adc92932a6bd199926f7eda7..0000000000000000000000000000000000000000 --- "a/06 \351\231\210\345\277\227\344\274\237/\347\272\246\346\235\237.md" +++ /dev/null @@ -1,68 +0,0 @@ -# 笔记 - -## 约束 - - 1、非空约束 not null - -非空约束表示这个字段是必填的 - -``` mysql -create table biaoge( - id int not null -); -``` - -2、默认约束 default - -当没填值时系统可以自动从默认值里填充 - -``` mysql -create table biaoge( - id int(10) default 'nan' -); -``` - -3、主键约束 primary key - -非空值不能重复,一个表中只有一个主键 - -``` mysql -create table biaoge( - id int not null primary key -); -``` - -4、唯一约束 unique key - -值不能重复,可以为空,一个表中可以设置多个唯一 - -``` mysql -create table biaoge( - id int not null unique key -); -``` - -45、自增约束 - -注意自增前要有主键,不给值时、给零、给null,会在原来的最大基础上加一,如果给了值就会以给的值为准 - -``` mysql -create table biaoge( - id int not null unique key auto_increment -); -``` - -6、外键约束 foreign references - -类似于部门和员工员工会被分配到各个部门里 - -``` mysql -create table biaoge1( - id int not null -); -create table biaoge2( - id int not null - foreign key (id) references biaoge1 (id) -); -``` - diff --git "a/08 \345\256\230\346\226\207\350\257\232/2023.03.1 \345\205\263\350\201\224\346\237\245\350\257\242.md" "b/08 \345\256\230\346\226\207\350\257\232/2023.03.1 \345\205\263\350\201\224\346\237\245\350\257\242.md" deleted file mode 100644 index 023f74facc0256fc6738a1a6ec72530cb4e1d985..0000000000000000000000000000000000000000 --- "a/08 \345\256\230\346\226\207\350\257\232/2023.03.1 \345\205\263\350\201\224\346\237\245\350\257\242.md" +++ /dev/null @@ -1,301 +0,0 @@ - - -# 笔记 - -Avg()平均值 Sum()求和 Max()最大值 - -Min()最小值 count()统计记录器 - -count(*)统计全部,count*(字段)统计非null的值 - -### 关联查询 - -关联查询:两个或更多个表一起查询。 - -又称为联合查询,多表查询 - -1、关联查询的结果一共有7种: - -两个表的记录分为四种: - -①A表中的记录能在B表中找到对应的记录 - -②A表中的记录在B表中找不到对应的记录 - -③B表中的记录可以在A表找到对应的记录 - -④B表中的记录在A表中找不到对应的记录 - -(1)A∩B ①③ - -(2)A ①② - -(3)A-A∩B ② - -(4)B ③④ - -(5)B-A∩B ④ - -(6)A∪B ①②③④ - -(7)A∪B-A∩B **②④** - -2.两个表要一起查询,要有前提条件:有关联 - -内连接:a inner join b on a.字段=b.字段 ab相同数据 - -左全连接:a left join b on a.字段=b.字段 where a.字段 is null 不重复的a数据 - -右全连接:a right join b on a.字段=b.字段 where b.字段 is null 不重复的b数据 - -左连接:a left join b on a.字段=b.字段 全a数据 - -右连接:a right join b on a.字段=b.字段 全b数据 - -# 作业 - -表(一)Student (学生表) - -~~~ mysql -create table Student( -Sno varchar (20) not null primary key, -Sname varchar (20) not null, -Ssex varchar (20) not null, -Sbirthday datetime, -Class varchar (20) -); - -~~~ - - - -表(二)Course(课程表) - -~~~ mysql -create table Course( -Cno varchar (20) not null primary key, -Cname varchar (20) not null, -Tno varchar (20) not null, -foreign key(Tno) references Teacher(Tno) -); - -~~~ - - - -表(三)Score(成绩表) - -~~~ mysql -create table Score( -Sno varchar (20) not null, -foreign key(Sno) references Student(Sno), -Cno varchar (20), -foreign key(Cno) references Course(Cno), -Degree Decimal(4,1) -); - -~~~ - - - -表(四)Teacher(教师表) - -~~~ mysql -create table Teacher( -Tno varchar (20) not null primary key, -Tname varchar (20) not null, -Tsex varchar (20) not null, -Tbirthday datetime, -Profvarchar (20), -Depart varchar (20) not null -); - -~~~ - - - -1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ - -~~~ mysql -select score.Sno,score.Cno from score INNER JOIN course INNER JOIN student on score.Sno=student.Sno and course.Cno=score.Cno; -~~~ - - 2,查询没有学生的教师的所有信息 - -表(一)Student - -~~~ mysql -INSERT INTO student VALUES - ('108', '曾华', '男', '1977-9-1', '95033' ), - ('105', '匡明', '男', '1975-10-2', '95031' ), - ('107', '王丽', '女', '1976-1-23', '95033' ), - ('101', '李军', '男', '1976-2-20', '95033' ), - ('109', '王芳', '女', '1975-2-10', '95031' ), - ('103', '陆君', '男', '1974-6-3', '95031' ); - -~~~ - - - -表(二)Course - -~~~ sql -INSERT INTO course VALUES -('3-105','计算机导论','825'), -('3-245','操作系统','804'), -('6-166','数字电路','856'), -('9-888','高等数学','831'); - -~~~ - - - -表(三)Score - -~~~ sql -INSERT INTO score VALUES -('103','3-245','86'), -('105','3-245','75'), -('109','3-245','68'), -('103','3-105','92'), -('105','3-105','88'), -('109','3-105','76'), -('101','3-105','64'), -('107','3-105','91'), -('108','3-105','78'), -('101','6-166','85'), -('107','6-166','79'), -('108','6-166','81'); - -~~~ - - - -表(四)Teacher - -~~~ sql -INSERT INTO teacher VALUES - ('804', '曾华', '男', '1977-9-1', '95033' ), - ('856', '匡明', '男', '1975-10-2', '95031' ), - ('825', '王丽', '女', '1976-1-23', '95033' ), - ('831', '李军', '男', '1976-2-20', '95033' ); - -~~~ - - - -查询Score表中的最高分的学生学号和课程号。 - -~~~ sql -select Sno,Cno from Score; -~~~ - - - -查询所有学生的Sname、Cno和Degree列。 - -~~~ sql - SELECT student.Sname,score.Cno,score.Degree FROM student INNER JOIN score ON student.Sno=score.Sno; - -~~~ - - - -查询所有学生的Sno、Cname和Degree列。 - -~~~ sql -SELECT score.Sno,course.Cname,score.Degree from course INNER JOIN score on score.Cno=course.Cno; -~~~ - - - -查询所有学生的Sname、Cname和Degree列。 - -~~~ sql -SELECT student.Sname,course.Cname,score.Degree FROM student INNER JOIN course INNER JOIN score on student.Sno=score.Sno and course.Cno=score.Cno; -~~~ - - - -查询“95033”班学生的平均分。 - -查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 - -~~~ sql -select * from Score where Cno='3-105' and degree>(select degree from score where sno='109' and cno='3-105'); -~~~ - - - -查询score中选学多门课程的同学中分数为非最高分成绩的记录。 - -查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 - -~~~ sql -select * from score INNER JOIN student INNER JOIN course on score.Sno=student.Sno and course.Cno=score.Sno where Degree>(score.Sno='109') and score.Cno='3-105'; -~~~ - -查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 - -查询“张旭“教师任课的学生成绩。 - -~~~ sql -select Score.degree from Score inner join Course inner join Teacher ON -Score.Cno=Course.Cno and Course.Tno=Teacher.Tno where Teacher.Tname='张旭'; - -~~~ - - - -查询选修某课程的同学人数多于5人的教师姓名。 - -查询出“计算机系“教师所教课程的成绩表。 - -~~~ sql -SELECT score.Degree FROM teacher INNER JOIN course INNER JOIN score on teacher.Tno=course.Tno and course.Cno=score.Cno where teacher.Depart='计算机系'; -~~~ - - - -查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 - -查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 - -查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. - -查询成绩比该课程平均成绩低的同学的成绩表。 - -查询所有任课教师的Tname和Depart. - -查询所有未讲课的教师的Tname和Depart. - -查询“男”教师及其所上的课程。 - -~~~ sql -select Tname,Cname from Teacher inner join Course on -Teacher.Tno=Course.Tno -where -Tsex='男'; - -~~~ - - - -查询最高分同学的Sno、Cno和Degree列。 - -查询和“李军”同性别的所有同学的Sname. - -查询和“李军”同性别并同班的同学Sname. - -查询所有选修“计算机导论”课程的“男”同学的成绩表。 - -~~~ sql -select Degree from Course inner join Score inner join Student on -Course.Cno=Score.Cno and Score.Sno=Student.Sno -where -Ssex='男' -and -Cname=(select Cname from Course where Cname='计算机导论') ; - -~~~ - diff --git "a/08 \345\256\230\346\226\207\350\257\232/20230219 \346\225\260\346\215\256\347\261\273\345\236\213\347\254\224\350\256\260.md" "b/08 \345\256\230\346\226\207\350\257\232/20230219 \346\225\260\346\215\256\347\261\273\345\236\213\347\254\224\350\256\260.md" deleted file mode 100644 index 5e2134ee211a911395f50cbc3898c6dcb049e115..0000000000000000000000000000000000000000 --- "a/08 \345\256\230\346\226\207\350\257\232/20230219 \346\225\260\346\215\256\347\261\273\345\236\213\347\254\224\350\256\260.md" +++ /dev/null @@ -1,243 +0,0 @@ -# MySQL语法 - -1.不分大小写 - -2.一般以;结尾 - -3.库名,表名,字段名(列名),支持英文字母,_,数字 - -4.名称中不要用空格 - -5.名称中,不用sql语句的关键字 - -6.‘ “ `(反引号|飘号),用来标记名称 - -7.--注释,#注释内容,/* */多行注释,(ctel+/) - -8.数值直接写,不用符号包裹,字符串和时间数型用单引号包裹 - -### 数据类型 - -1.约束类型 - -2.规范数据空间的占用(内存) - -## 类型 - -#### 数值型 小数+整数 - -1.整形 int(M)这里的M不是限制长度,单独使用毫无意义,配合zerofill使用(补0) - -2.浮点 float(M,N) double(M,N) M表示限制整数+小数只能存放M长度,N限制小数的长度。如果小数的部分超过了N,会自动截断,并四舍五入。 - -3.定点 decimal(M,N) 默认(10,0),其他同上 - -#### 字符型 - -1.固定长度的 char 默认是1,最大是255 - -2.可变长度的 varchar(M) 这里的M不可缺省 - -#### 时间类型 - -1.data 年月日 - -2.time 时分秒 - -3.year 年 - -4.datatime - -5.timestamp 时间戳 - -#### enum枚举类型 - -类似单选框中的选项,只能选一个。 enum(1,2,3,4,5) - -#### set集合类型 - -类似多选框,可以选0个或是多个,但也只能选里面有的。set(1,2,3,4,5) - -### #一些数据库的属性 - -1.unsigned 无符号的,表示正数不能负数 - -2.null 允许为空。not null 不允许为空。 - -3.default 默认值 - -4.auto_increment 自增 - -## # DDL - -创建数据库 - -```MYSQL -create database 数据库名 charset 字符集; -``` - -查看所有数据库 - -```mysql -show databases; -``` - -查看数据库的定义语句 - -```mysql -show create database -``` - -修改数据库编码 - -```mysql -#修改数据库字符集和校对规则 -ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称 COLLATE 字符集对应校对规则; -``` - -删除数据库 - -```mysql -drop database 数据库名; -``` - -使用数据库 - -```mysql -use 数据库名; -``` - -查看数据库中的所有表格 - -```mysql -use 数据库名; -show tables; -或 -show tables from 数据库名; -``` - -查看指定字段 - -~~~ mysql -select 字段名 [字段名,字段名] from 表格名; -select 字段名 [字段名,字段名] from 表格名 where 条件; -~~~ - - - -创建表格 - -```mysql -create table 数据表名称( - 字段名1 数据类型, - 字段名2 数据类型 - ... -); -``` - -查看表的定义信息 - -```mysql -show create table 表名称; -``` - -查看表结构 - -```mysql -desc 表名称; -``` - -修改表名称 - -```mysql -alter table 旧表名 rename [to] 新表名; -rename table 旧表名称 to 新表名称; -``` - -删除表格 - -```mysql -drop table 表名称; -``` - -删除字段 - -```mysql -alter table 表名称 drop [column] 字段名称; -``` - -增加字段 - -```mysql -alter table 表名称 add [column] 字段名称 数据类型; -alter table 表名称 add [column] 字段名称 数据类型 first; -alter table 表名称 add [column] 字段名称 数据类型 after 另一个字段; -``` - -修改字段的数据类型 - -```mysql -alter table 表名称 modify [column] 字段名称 新的数据类型; -``` - -修改字段名称 - -```mysql -alter table 表名称 change [column] 旧字段名称 新的字段名称 新的数据类型; -``` - -修改字段位置 - -```mysql -alter table 表名称 modify [column] 字段名称 数据类型 first; -alter table 表名称 modify [column] 字段名称 数据类型 after 另一个字段; -``` - -# DML - -添加一条记录到表中 - -```mysql -insert into 表名称 values(值列表);#值列表中的值的顺序、类型、个数必须与表结构一一对应 - -insert into 表名称 (字段列表) values(值列表); -``` - -添加多条记录到表中 - -```mysql -insert into 表名称 values(值列表1),(值列表2),(值列表3); #值列表中的值的顺序、类型、个数必须与表结构一一对应 - -insert into 表名称 (字段列表) values(值列表1),(值列表2),(值列表3); -``` - -修改所有行 - -```mysql -update 表名称 set 字段名1 = 值, 字段名2 = 值; #给所有行修改 -``` - -修改部分行 - -```mysql -update 表名称 set 字段名1 = 值, 字段名2 = 值 where 条件; #给满足条件的行修改 -``` - -删除部分行的数据 - -```mysql -delete from 表名称 where 条件; -``` - -删除整张表的数据,表结构留下 - -```mysql -delete from 表名称; -``` - -截断表,清空表中的数据,只留有表结构 - -```mysql -truncate 表名称; -``` - diff --git "a/08 \345\256\230\346\226\207\350\257\232/20230220 DDL\345\222\214DML\350\257\255.md" "b/08 \345\256\230\346\226\207\350\257\232/20230220 DDL\345\222\214DML\350\257\255.md" deleted file mode 100644 index 1f1ff66e1c9389580b16823ad5b0745129f34761..0000000000000000000000000000000000000000 --- "a/08 \345\256\230\346\226\207\350\257\232/20230220 DDL\345\222\214DML\350\257\255.md" +++ /dev/null @@ -1,378 +0,0 @@ -# 笔记 - -if not exists 如果不存在 -例:如果没有该名称的数据库则创建名为该名称的数据库,否则跳过 -if existe 如果存在 -例:如果该数据库存在则删除该数据库否则跳过 -修改数据库的编码 -alter database 数据库名 character set 新的数据库名; -添加一个表字段 -alter table 表名称 add 字段名 数据类型; -删除一个字段 -alter table 表名称 change 旧字段名 新字段名 数据类型; -修改一个字段的数据类型 -alter table 表名称 modify 字段名称 新数据类型; - -update 表名称 set 字段名=值 ......无条件执行 - -update 表名称 set 字段名=值.......where 条件 - -删除整个表数据 - -delete from 表名称 delete form 表名称 where 条件 - -修改 - -删除字段 - -alter table 表名称 drop column 字段名 - -增加字段 - -alter table 表名称 add column 字段名 数据类型 after 条件 - -## 第1题 - -1、创建数据库test01_market - -~~~ MYSQL -CREATE DATABASE text01_market; -~~~ - -2、创建表格customers - -~~~ mysql - CREATE TABLE customers( -c_num INT(11), -c_name VARCHAR(50), -c_contact varchar(50), -c_city varchar(50), -c_birth DATE -); -~~~ - - - -| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date | - -**要求3:**将c_contact字段移动到c_birth字段后面 - -~~~ mysql -ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth; -~~~ - -**要求4:**将c_name字段数据类型改为 varchar(70) - -~~~ mysql - ALTER TABLE customers MODIFY c_name VARCHAR(70); -~~~ - -**要求5:**将c_contact字段改名为c_phone - -~~~ mysql -ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); -~~~ - -**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -~~~ mysql -ALTER TABLE customers ADD c_gender CHAR(1) AFTER c_name; -~~~ - -**要求7:**将表名改为customers_info - -~~~ mysql -ALTER TABLE customers RENAME customers_info; -~~~ - -**要求8:**删除字段c_city - -```mysql -ALTER TABLE customers_info DROP c_city;x  -``` - -## 第2题 - -1、创建数据库test02_library - -~~~ mysql -CREATE DATABASE text02_library; -~~~ - -2、创建表格books - -~~~ mysql -CREATE TABLE books( -b_id int(11), -b_name VARCHAR(50), -`authors` VARCHAR(100), -price FLOAT, -pubdate year, -note VARCHAR(100), -num INT(11) -); -~~~ - - - -| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------- | -------- | ------------- | -------- | ---- | -| b_id | 书编号 | int(11) | 否 | 是 | -| b_name | 书名 | varchar(50) | 否 | 否 | -| authors | 作者 | varchar(100) | 否 | 否 | -| price | 价格 | float | 否 | 否 | -| pubdate | 出版日期 | year | 否 | 否 | -| note | 说明 | varchar(100) | 是 | 否 | -| num | 库存 | int(11) | 否 | 否 | - -3、向books表中插入记录 - -1) 指定所有字段名称插入第一条记录 - -~~~ mysql -INSERT INTO books(b_id,b_name,`authors`,price,pubdate,note,num) VALUES (1,'Tal of AAA','Dickes',23,1995,'novel',11); - -~~~ - - - -2)不指定字段名称插入第二记录 - -~~~ mysql -INSERT INTO books VALUES(2,'EmmaT','Jane lura',35,1993,'joke',22); -~~~ - - - -3)同时插入多条记录(剩下的所有记录) - -~~~ mysql -INSERT INTO books(b_id,b_name,`authors`,price,pubdate,note,num) VALUES (3,'Story of Jane','Jane Tim',40,2001,'novel',0),(4,'Lovey Day','George Byron',20,2005,'novel',30),(5,'Old land','Honore Blade',30,2010,'law',0),(6,'The Battle','Upton Sara',30,1999,'medicine',40),(7,'Rose Hood','Richard haggard',28,2008,'cartoon',28); -~~~ - - - -| b_id | b_name | authors | price | pubdate | note | num | -| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -4、将小说类型(novel)的书的价格都增加5。 - -~~~ mysql -UPDATE books SET price =price+5 WHERE note='novel'; -~~~ - -5、将名称为EmmaT的书的价格改为40。 - -~~~ mysql -UPDATE books SET price=40 WHERE b_name='EmmaT'; -~~~ - -6、删除库存为0的记录 - -```mysql -DELETE FROM books WHERE num=0; -``` - - - -## 第3题 - -1、创建数据库test03_bookstore - -~~~ mysql -CREATE DATABASE text03_bookstore; -~~~ - - - -2、创建book表 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| sales | int(11) | NO | | NULL | | -| stock | int(11) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -~~~ mysql -CREATE TABLE book( -id INT(11), -title VARCHAR(100), -author VARCHAR(100), -price DOUBLE(11,2), -sales INT(11), -syock int(11), -img_path VARCHAR(100) -); -~~~ - - - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------------+------------+-------+-------+-------+----------------------------+ -| id | title | author | price | sales | stock | img_path | -+----+-------------+------------+-------+-------+-------+-----------------------------+ -| 1 | 解忧杂货店 | 解忧杂货店 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | -| 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | -+----+---------------+------------+-------+-------+-------+----------------------------+ -``` - -~~~ mysql -INSERT INTO book VALUES (1,'解忧杂货店','解忧杂货店',27.20,102,98,'static/img/default.jpg'),(2,'边城','沈从文',23.00,102,98,'static/img/default.jpg'); -~~~ - - - -3、创建用户表users,并插入数据 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| username | varchar(100) | NO | UNI | NULL | | -| password | varchar(100) | NO | | NULL | | -| email | varchar(100) | YES | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -~~~ mysql -CREATE TABLE users( -id INT(11), -username VARCHAR(100), -`password` VARCHAR(100), -email VARCHAR(100) -); -~~~ - - - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+----------+----------------------------------+--------------------+ -| id | username | password | email | -+----+----------+----------------------------------+--------------------+ -| 1 | admin | 112233 | admin@mxdx.com | -+----+----------+----------------------------------+--------------------+ -``` - -~~~ mysql -INSERT INTO users(id,username,`password`,email) VALUES (1,'admin',112233,'admin@mxdx.com'); -~~~ - - - -4、创建订单表orders - -```mysql -+--------------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+--------------+--------------+------+-----+---------+-------+ -| id | varchar(100) | NO | PRI | NULL | | -| order_time | datetime | NO | | NULL | | -| total_count | int(11) | NO | | NULL | | -| total_amount | double(11,2) | NO | | NULL | | -| state | int(11) | NO | | NULL | | -| user_id | int(11) | NO | MUL | NULL | | -+--------------+--------------+------+-----+---------+-------+ -``` - -~~~ mysql -CREATE TABLE orders( -id varchar(100), -order_time datetime, -total_count int(11), -total_amount double(11,2), -state int(11), -user_id int(11) -); -~~~ - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----------------+---------------------+-------------+--------------+-------+---------+ -| id | order_time | total_count | total_amount | state | user_id | -+----------------+---------------------+-------------+--------------+-------+---------+ -| 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | -+----------------+---------------------+-------------+--------------+-------+---------+ -``` - -~~~ mysql -INSERT INTO orders VALUES('15294258455691','2018-06-20 00:30:45',2,50.20,0,1); -~~~ - - - -5、创建订单明细表order_items - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| count | int(11) | NO | | NULL | | -| amount | double(11,2) | NO | | NULL | | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -| order_id | varchar(100) | NO | MUL | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -~~~ mysql -CREATE TABLE order_items( -id int(11), -`count` int(11), -amount DOUBLE(11,2), -title varchar(100), -author varchar(100), -price double(11,2), -img_path varchar(100), -order_id varchar(100) -); -~~~ - - - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------+--------+---------+---------+-------+----------------+----------------+ -| id |count| amount| title | author | price | img_path | order_id | -+----+-------+--------+------------+----------+-------+----------------+----------------+ -| 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | -| 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | -+----+-------+--------+------------+----------+-------+------------+----------------+ -``` - -参考答案: - -```mysql -INSERT INTO order_items VALUES (1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg','15294258455691'),(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg','15294258455691'); -``` - diff --git "a/08 \345\256\230\346\226\207\350\257\232/20230222 DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274\344\275\234\344\270\232.md" "b/08 \345\256\230\346\226\207\350\257\232/20230222 DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274\344\275\234\344\270\232.md" deleted file mode 100644 index ab0aca0407a4e12eb8d5d17173c266775fee6714..0000000000000000000000000000000000000000 --- "a/08 \345\256\230\346\226\207\350\257\232/20230222 DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274\344\275\234\344\270\232.md" +++ /dev/null @@ -1,459 +0,0 @@ -# 笔记 - -#### 1.非空约束 - - not null (表示这个字段必须填写) - -#### 2.默认约束 - -default (当你不给值时,系统自动以默认值增充) #非空+默认值约束 - -#### 3.主键约束 - -primary key (非空,唯一 就是值不能重复,同一个表中只能有一个主键) - -#### 4.唯一约束 - -unique key (值不能重复,可以为空,一个表中可以有多个字段可设唯一) - -#### 5.自增约束 - -auto_increment #前提是主键 - -(不给值,给0或者给null值,会自动在原来最大数基础上+1,给了值,就以给的值为准。) - -#### 6.外键约束 - -foreign key (约束两个表的关系,或者是一个表的两个字段之间的关系) - -格式: foreign key (从表的字段) references 主表(被依赖字段); - - 1.主表(父表)和从表(子表) # 主表:被依赖,被参考。 从表:依赖别人的,参考别人的。 - - 2.外键的建立和指定要在从表中定义 - - ##### 要求 - -A.主表必须先存在。 - -B.主表被依赖字段必须有索引,所以通常是主键列或唯一键列才能作为被依赖字段。 - -C.删除表时,要么先删除从表,在删除主表。要么先解除外键约束,才能删除。 - -D.从表的依赖字段的数据,必须在主表被依赖字段中选择,添加与修改都是这样。 - -E.主表被依赖字段的数据不能轻易的删除和修改,要看是否被引用。 - -#外键的约束等级为 on update/delete cascade/(set null) - - - -## 第1题 - -1、创建数据库test01_company - -~~~ mysql -CREATE DATABASE text01_company; -~~~ - - - -2、创建表格offices - -| 字段名 | 数据类型 | -| ---------- | ----------- | -| officeCode | int | -| city | varchar(30) | -| address | varchar(50) | -| country | varchar(50) | -| postalCode | varchar(25 | - -~~~ mysql -CREATE TABLE offices( -officeCode int, -city VARCHAR(30), -address varchar(50), -country varchar(50), -postalCode varchar(25) -); -~~~ - -3、创建表格employees - -| 字段名 | 数据类型 | -| ------------- | ---------------------------- | -| empNum | int(11) | -| lastName | varchar(50) | -| firstName | varchar(50) | -| mobile | varchar(25) | -| code | int | -| jobTitle | varchar(50) | -| birth | date | -| Note | varchar(255) | -| Sex | varchar(5) | - -~~~ mysql -CREATE table employees( -empNum int(11), -lastName varchar(50), -firstName varchar(50), -mobile VARCHAR(25), -`code` int, -jobTitle VARCHAR(50), -birth date, -Note varchar(255), -Sex VARCHAR(5) -); -~~~ - - - -**要求4:**将表employees的mobile字段修改到code字段后面。 - -~~~ mysql -ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER `code` ; -~~~ - -**要求5:**将表employees的birth字段改名为birthday; - -~~~ mysql -ALTER TABLE employees CHANGE mobile birthday date; -~~~ - - - -**要求6:**修改sex字段,数据类型为char(1)。 - -~~~ mysql -ALTER TABLE employees MODIFY sex char(1); -~~~ - - - -**要求7:**删除字段note; - -~~~ mysql -ALTER TABLE employees DROP note; -~~~ - - - -**要求8:**增加字段名favoriate_activity,数据类型为varchar(100); - -~~~ mysql -ALTER TABLE employees add favoriate_activity VARCHAR(100); -~~~ - - - - - -**要求9:**将表employees的名称修改为 employees_info - -```mysql -ALTER TABLE employees RENAME employees_info; -``` - - - -## 第2题 - -1、创建数据库test02db - -~~~ mysql -CREATE database text02db; -~~~ - - - -2、创建表格pet - -| 字段名 | 字段说明 | 数据类型 | -| ------- | -------- | ----------- | -| name | 宠物名称 | varchar(20) | -| owner | 宠物主人 | varchar(20) | -| species | 种类 | varchar(20) | -| sex | 性别 | char(1) | -| birth | 出生日期 | year | -| death | 死亡日期 | year | - -~~~ mysql -CREATE TABLE pet( -`name` varchar(20), -`owner` varchar(20), -species varchar(20), -sex char(1), -birth year, -death year -); -~~~ - - - -3、添加记录 - -| name | owner | species | sex | birth | death | -| :----- | ------ | ------- | ---- | ----- | ----- | -| Fluffy | harold | Cat | f | 2003 | 2010 | -| Claws | gwen | Cat | m | 2004 | | -| Buffy | | Dog | f | 2009 | | -| Fang | benny | Dog | m | 2000 | | -| bowser | diane | Dog | m | 2003 | 2009 | -| Chirpy | | Bird | f | 2008 | | - -~~~ mysql -INSERT into pet VALUES('Fluffy','harold','Cat','f',2003,2010),('Claws','gwen','Cat','m',2004,NULL),('Buffy',NULL,'Dog','f',2009,NULL),('Fang','benny','Dog','m',2000,NULL),('bowser','diane','Dog','m',2003,2009),('Chirpy',NULL,'Bird','f',2008,NULL); -~~~ - - - -4、 添加字段主人的生日owner_birth。 - -~~~ mysql -ALTER TABLE pet add owner_birth date; -~~~ - - - -5、 将名称为Claws的猫的主人改为kevin - -~~~ mysql -UPDATE pet SET `owner`='kevin' WHERE `name`='Claws'; -~~~ - - - -6、 将没有死的狗的主人改为duck - -~~~ mysql -update pet set `owner`='duck' WHERE `death`IS NULL; -~~~ - - - -7、 查询没有主人的宠物的名字; - -~~~ mysql -SELECT `name` FROM pet where `owner` IS null; -~~~ - - - -8、 查询已经死了的cat的姓名,主人,以及去世时间; - -~~~ mysql -select `name`,`owner`,death from pet WHERE death=2010; -~~~ - - - -9、 删除已经死亡的狗 - -~~~ mysql -delete from pet where species='Dog' and death='2009'; -~~~ - - - -10、查询所有宠物信息 - -```mysql -select * from pet; -``` - -## 第3题 - -1、创建数据库:test03_company - -```sql -create database test03_company charset utf8; -``` - -2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - -A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - -```mysql -use test03_company ; -create table department( - depid int primary key auto_increment, - depname char(10) not null unique key, - deinfo varchar(200) -); -``` - -B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - -* ​ 雇员编号为主键; -* ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); -* ​ 性别默认为男; - -```mysql -create table employee( -empid int primary key, -name varchar(10), -sex enum('男','女') not null default'男', -title varchar(10), -birthday date, -depid int, -CONSTRAINT department foreign key(depid) references department(depid) -); -``` - -C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - -3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) - -~~~ mysql -create table salary( -empid int primary key, -basesalary double, -titlesalary double, -deduction double, -foreign key(empid) references employee(empid) -); -~~~ - - - -4、添加数据如下: - -部门表: - -| 部门编号 | 部门名称 | 部门简介 | -| -------- | -------- | ------------ | -| 111 | 生产部 | Null | -| 222 | 销售部 | Null | -| 333 | 人事部 | 人力资源管理 | - -~~~ mysql -INSERT INTO department(depid,depname,deinfo) VALUES (111,'生产部',NULL),(222,'销售部',NULL),(333,'人事部','人力资源管理'); -~~~ - - - - 雇员表: - -| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | -| -------- | ---- | ---- | ---------- | ---------- | ------------ | -| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | -| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 1114 | -| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | -| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | - -~~~ mysql -INSERT into employee(empid,`name`,sex,title,birthday,depid) VALUES(1001,'张三','男','高级工程师','1975-1-1',111),(1002,'李四','女','助工','1985-1-1',111),(1003,'王五','男','工程师','1978-11-11',222),(1004,'张六','男','工程师','1999-1-1',222); -~~~ - - - - 工资表: - -| 雇员编号 | 基本工资 | 职务工资 | 扣除 | -| -------- | -------- | -------- | ---- | -| 1001 | 2200 | 1100 | 200 | -| 1002 | 1200 | 200 | NULL | -| 1003 | 2900 | 700 | 200 | -| 1004 | 1950 | 700 | 150 | - -~~~ mysql -INSERT INTO salary(empid,basesalary,titlesalary,deduction) VALUES(1001,2200,1100,200),(1002,1200,200,NULL),(1003,2990,700,200),(1004,1950,700,150); -~~~ - - - -## 第4题 - -1、创建一个数据库:test04_school - -~~~ mysql -CREATE DATABASE text04_scgool; -~~~ - - - -2、创建如下表格 - -表1 Department表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | -| DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | -| DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | - -~~~ mysql -CREATE TABLE Department( -DepNo int(10) PRIMARY KEY NOT NULL UNIQUE, -DepName VARCHAR(20) NOT NULL, -DepNote VARCHAR(50) -); -~~~ - - - -表2 Teacher表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| Number | 教工号 | int | 是 | 否 | 是 | 是 | -| Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | -| Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | -| Birth | 出生日期 | date | 否 | 否 | 否 | 否 | -| DepNo | 部门号 | int | 否 | 是 | 否 | 否 | -| Salary | 工资 | float | 否 | 否 | 否 | 否 | -| Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | - -~~~ mysql - create table Teacher( -Number int primary key not null unique, -`Name` varchar(30) not null, -Sex VARCHAR(4), Birth date, -DepNo int, -Salary float, -Address VARCHAR(100), -foreign key(DepNo) references Department(DepNo) -); -~~~ - - - -3、添加记录 - -| **DepNo** | **DepName** | **DepNote** | -| --------- | ----------- | ------------------ | -| 601 | 软件技术系 | 软件技术等专业 | -| 602 | 网络技术系 | 多媒体技术等专业 | -| 603 | 艺术设计系 | 广告艺术设计等专业 | -| 604 | 管理工程系 | 连锁经营管理等专业 | - -| **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | -| ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | -| 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | -| 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | -| 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | -| 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | -| 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | - -~~~ mysql -insert into Department VALUES (601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'),(603,'艺术设计系','广告艺术设计等专业'),(604,'管理工程系','连锁经营管理等专业'); -~~~ - - - -~~~ mysql -insert into Teacher VALUES (2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'),(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'),(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'),(2004,'James','女','1980-10-20',602,3500,'四川省成都市'),(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); -~~~ - - - -4、用SELECT语句查询Teacher表的所有记录。 - -```mysql -select * FROM Teacher; -``` - - - - - diff --git "a/08 \345\256\230\346\226\207\350\257\232/20230223 \345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" "b/08 \345\256\230\346\226\207\350\257\232/20230223 \345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" deleted file mode 100644 index 36e15ef9820cbca4e8dd918d8958eeb47a66ca68..0000000000000000000000000000000000000000 --- "a/08 \345\256\230\346\226\207\350\257\232/20230223 \345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" +++ /dev/null @@ -1,253 +0,0 @@ -# 笔记 - -## DQL - -结果去重 - -一个列里数据出现了好几次重复的值时,如果只想保留一个,就可以去重。 - -~~~mysql -select distinct 字段列表 from 表名称 where 条件; --- distinct 只能出现在第一个字段前面 -~~~ - -### 别名 - -~~~ mysql -select 字段名 [as] 别名 from 表名; --- as 可有可无 --- 别名的引号可以省略 -~~~ - -列的别名有空格时,加双引号,没有空格双引号可加可不加 - -表的别名不用加双引号,表的别名不能有空格 - -~~~ mysql -select * from 表明 as 别名; -~~~ - -### 模糊查询 - -### like - -%;代表任意个字符 - -—;代表一个字符,两个下划线就是两个字符 - -### 逻辑查询 - -### xor - -两者只能满足其中一个,不能同时满足,不能同时不满足。 - -## 运算符 - -div (保留整数部分) - -安全等于 <=> 可以用于null的运算 - -模,% (取余) - -不等于,!= 或 <> 不能用于null判断 - -## 区间 - -区间范围 - -~~~mysql -between x and y -~~~ - -不在这区间 - -~~~sql -not between x and y -~~~ - -集合范围 - -~~~sql -in (x,y,z),有其中一个就行 -not in(x,y,z),不在这其中 -~~~ - - - - - -## 第1题:员工表 - -```mysql -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - - - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - -**要求1:**查询出薪资在12000~13000之间的员工信息。 - -~~~ mysql -select * from employee where salary BETWEEN 12000 and 13000; -~~~ - - - -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -~~~ masql -select id,`name`,addr from employee where `name` LIKE '%刘%'; -~~~ - -**要求3:**将“李四”的家庭住址改为“广东韶关” - -~~~ mysql -UPDATE employee set addr='广东韶关' where `name`='李四'; -~~~ - -**要求4:**查询出名字中带“小”的员工 - -~~~ mysql -SELECT * from employee where `name` LIKE '%小%'; -~~~ - -**要求5:**查询出薪资高于11000的男员工信息 - -~~~ mysql -select * from employee where salary > 11000 and sex='男'; -~~~ - -**要求6:**查询没有登记电话号码的员工 - -~~~ mysql -select * from employee where tel is null; -~~~ - -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -~~~ mysql -select * from employee where salary>12000 or addr='广东深圳' or sex='男'; -~~~ - -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - -```mysql -select salary*12 年薪 , `name` 姓名 from employee; -``` - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -``` - -**要求1:** 查询大国 的国家名称、人口和面积。 - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) - -- 人口至少为 2500 万(即 25000000) - - ~~~ mysql - select `name`,area,population from `countries_info` where area >= 3000000 or population >= 25000000; - ~~~ - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -~~~ mysql -SELECT * from `countries_info` where continent='asia'; -~~~ - -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -~~~ mysql -select * from `countries_info` where area < 10000 or population < 100000; -~~~ - - - -**要求4:**查询国家名字中包含“o“字母的国家信息 - -~~~ mysql -select * from `countries_info` where `name` like '%o%'; -~~~ - -**要求5:**查询GDP值超过10000000000的国家信息 - -~~~ mysql -select * from `countries_info` where gdp>10000000000; -~~~ - -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -~~~ mysql -select `name` 国家名,population 人口,gdp GDP值,gdp/population 人均贡献GDP值 from `countries_info`; -~~~ - -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - -~~~ mysql -select * from `countries_info` where gdp/population<1000; -~~~ - -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -```mysql -select `name` 国家名,area 面积,population 人口, area/population 人均国土面积值 from `countries_info`; -``` - diff --git "a/08 \345\256\230\346\226\207\350\257\232/20230308 \345\255\220\346\237\245\350\257\242.md" "b/08 \345\256\230\346\226\207\350\257\232/20230308 \345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index e12d2b2e94927614868bfde1c8c8aba1ed000951..0000000000000000000000000000000000000000 --- "a/08 \345\256\230\346\226\207\350\257\232/20230308 \345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,200 +0,0 @@ -# 笔记 - -7大字句 -1. from : 从哪些表中筛选 -2. on : 关联多表查询时,去除笛卡尔积 -3. where : 从表中筛选的条件 -4. group by : 分组依据 -5. having:在统计结果中再次筛选 -6. order by: 排序 -7. limit:分页 -必须按照(1)~(7)的顺序 编写字句 - -having子句也写条件 -where的条件是针对原表中的记录的筛选。where后面不能出现分组函数。 -having子句是对统计结果(分组函数计算后)的筛选。having可以加分组函数。 - -### 子查询 - -嵌套在其他sql语句中的查询语句 - -子查询通常先运行,所以要用()包括起来 - -子查询的运行结果可以作为其语句条件,数据源等 - -## select 1 from 2 where 3 - -# 作业 - -在如图的数据表上完成以下题目 -表一 - -~~~ sql -CREATE TABLE `stuinfo` ( - `stuN0` varchar(20) NOT NULL, - `stuName` varchar(20) DEFAULT NULL, - `stuSex` varchar(10) DEFAULT NULL, - `stuAge` int(11) DEFAULT NULL, - `stuAddress` varchar(20) DEFAULT NULL, - `stuseat` int(11) DEFAULT NULL, - PRIMARY KEY (`stuN0`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -~~~ - -表二 - -~~~ sql -CREATE TABLE `stuexam` ( - `examN0` int(11) NOT NULL, - `stuN0` varchar(20) DEFAULT NULL, - `wittenExam` int(11) DEFAULT NULL, - `labExam` int(11) DEFAULT NULL, - PRIMARY KEY (`examN0`), - KEY `stuN0` (`stuN0`), - CONSTRAINT `stuexam_ibfk_1` FOREIGN KEY (`stuN0`) REFERENCES `stuinfo` (`stuN0`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -~~~ - -表三 - -~~~ sql -CREATE TABLE `stumarks` ( - `examN0` int(11) DEFAULT NULL, - `stuID` varchar(20) DEFAULT NULL, - `score` int(11) DEFAULT NULL, - KEY `examN0` (`examN0`), - CONSTRAINT `stumarks_ibfk_1` FOREIGN KEY (`examN0`) REFERENCES `stuexam` (`examN0`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -~~~ - - -添加数据 - - -1. ~~~ sql - INSERT into stuinfo VALUES ('s2501','张秋利','男',20,'美国硅谷',1),('s2502','李斯文','女',18,'湖北武汉',2),('s2503','马文才','男',18,'湖南长沙',3),('s2504','欧阳俊雄','女',21,'湖北武汉',4),('s2505','梅超风','男',16,'湖北武汉',5),('s2506','陈旋风','男',19,'美国硅谷',6); - - ~~~sql - -2. - -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); - ~~~ - -3. - -~~~ sql -INSERT INTO stuMarks VALUES -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); -~~~ - -1.查询出年龄比班上平均年龄大的学生的信息 - -~~~ sql -SELECT * from stuinfo where stuAge >(select avg(stuAge) from stuinfo); -~~~ - -2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) - -~~~ sql -select t.stuN0,t.stuName,t.stuSex,max(score) from stumarks s left join stuinfo t on s.stuID=t.stuN0 group by s.stuID; -~~~ - -3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) - -~~~ sql - -~~~ - -4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) - -~~~ sql -SELECT * from stuinfo where stuSex='男' and stuAge>=20; - -~~~ - -~~~ sql -SELECT * from stuinfo where stuAge=(SELECT stuAge from stuinfo where stuSex='男' and stuAge>=20); - -~~~ - - - -5.查询出年龄比所有男生年龄都大的女生的信息 - -~~~ sql -SELECT * from stuinfo where stuSex='女'and stuAge> all (SELECT stuAge from stuinfo where stuSex='男'); - -~~~ - - - -6.查询出所有选修课程都及格的学生的信息 (stuMarks) - -~~~ sql -SELECT * from stuinfo LEFT JOIN stumarks on stuinfo.stuN0=stumarks.stuID WHERE score>60 GROUP BY stuid; -~~~ - - - -7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - -~~~ sql -SELECT * from stuinfo a LEFT JOIN stumarks s on a.stuN0=s.stuID where s.score is not null; -~~~ - - - -8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - -~~~ sql -SELECT * from stuinfo a LEFT JOIN stumarks s on a.stuN0=s.stuID where s.score is null; -~~~ - - - -9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) - -~~~ sql -SELECT * from stuinfo LEFT JOIN stumarks on stuinfo.stuN0=stumarks.stuID where score>90; -~~~ - - - -10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) - - - -11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) - -~~~ sql -SELECT a.* from stuinfo a LEFT JOIN stumarks s on a.stuN0=s.stuID where s.score >(SELECT score from stumarks where stuID='s2501') GROUP BY stuID; -~~~ - - - -12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) - -13.查询班上比所有男生年龄都要大的女生的信息 - -~~~ sql -SELECT * from stuinfo where stuSex='女'and stuAge> all (SELECT stuAge from stuinfo where stuSex='男'); -~~~ - -14.查询出只要比某个男生年龄大的女生的信息 - -~~~ sql -select * from stuinfo where stusex = '女' and stuage > (select min(stuage) from stuinfo where stusex = '男'); -~~~ - diff --git "a/08 \345\256\230\346\226\207\350\257\232/20230309\345\244\247\344\275\234\344\270\232.md" "b/08 \345\256\230\346\226\207\350\257\232/20230309\345\244\247\344\275\234\344\270\232.md" deleted file mode 100644 index 315dffabe505c387c47ad702af702fb3b49056bf..0000000000000000000000000000000000000000 --- "a/08 \345\256\230\346\226\207\350\257\232/20230309\345\244\247\344\275\234\344\270\232.md" +++ /dev/null @@ -1,187 +0,0 @@ -你在一个软件公司上班,今天公司接一个新业务。要用MySQL给一个小说网站设计一个数据库。 -数据库名:xiaoshuo - -~~~ sql -CREATE database xiaoshuo charset utf8; -use xiaoshuo; -~~~ - - 作家信息表 ( author ) - -~~~ sql -CREATE TABLE `author` ( - `author_id` int(11) NOT NULL, - `author_name` varchar(20) NOT NULL, - `credits` int(11) DEFAULT NULL, - `vip_id` varchar(20) NOT NULL, - PRIMARY KEY (`author_id`), - KEY `vip_id` (`vip_id`), - CONSTRAINT `author_ibfk_1` FOREIGN KEY (`vip_id`) REFERENCES `vip` (`vip_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - - - -~~~ - - 作家等级信息表 ( vip ) - -~~~ sql -CREATE TABLE `vip` ( - `vip_id` varchar(20) NOT NULL, - `vip_name` varchar(20) NOT NULL, - PRIMARY KEY (`vip_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -~~~ - -. 小说作品信息表 ( story ) - -~~~ sql -CREATE TABLE `story` ( - `story_id` int(11) NOT NULL AUTO_INCREMENT, - `author_id` int(11) DEFAULT NULL, - `type_id` varchar(20) DEFAULT NULL, - `story_name` varchar(50) DEFAULT NULL, - `views_number` int(11) DEFAULT NULL, - PRIMARY KEY (`story_id`), - KEY `author_id` (`author_id`), - KEY `type_id` (`type_id`), - CONSTRAINT `story_ibfk_1` FOREIGN KEY (`author_id`) REFERENCES `author` (`author_id`), - CONSTRAINT `story_ibfk_2` FOREIGN KEY (`type_id`) REFERENCES `type` (`type_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -~~~ - - 小说作品类型表 ( type ) - -~~~ sql -CREATE TABLE `type` ( - `type_id` varchar(20) NOT NULL, - `type_name` varchar(20) NOT NULL, - PRIMARY KEY (`type_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -~~~ - -## 表格 - -~~~ sql - -CREATE TABLE author( -author_id INT, -author_name VARCHAR(20), -credits int, -vip_id VARCHAR(20) -); - -CREATE TABLE vip( -vip_id VARCHAR(20), -vip_name VARCHAR(20) -); - - -CREATE TABLE story( -story_id INT, -author_id int, -type_id VARCHAR(20), -story_name VARCHAR(50), -views_number int -); - -CREATE TABLE type( -type_id VARCHAR(20), -type_name VARCHAR(20) -); -~~~ - - 作家信息表 - -~~~ sql -INSERT into author VALUES -(1001,'朱逸群',600,'VIP02'), -(1002,'范建',8510,'VIP04'), -(1003,'史珍香',981,'VIP02'), -(1004,'范统',2364,'VIP02'), -(1005,'杜子腾',257,'VIP01'), -(1006,'刘产',678,'VIP02'), -(1007,'杜琦燕',438,'VIP03'); -~~~ - - 等级信息表 - -~~~ sql -INSERT into vip VALUES -('VIP01','青铜作家'), -('VIP02','白银作家'), -('VIP03','黄金作家'), -('VIP04','钻石作家'); -~~~ - -小说作品信息表 - -~~~ sql -INSERT into story VALUES -(1,1002,'L03','母猪产后与护理师的二三事',6541), -(2,1005,'L04','拖拉机大战蜘蛛侠',563), -(3,1003,'L01','这只小龙虾不正经',8754), -(4,1006,'L04','一个爹爹三个娃',36354), -(5,1006,'L01','皇上滚开本宫只劫财 ',3674), -(6,1005,'L05','给长城贴瓷砖的小太监',6541), -(7,1003,'L03','不科学御兽',1257), -(8,1005,'L01','镜面管理局',3257), -(9,1004,'L02','关于我成为灭魂师之后',1147), -(10,1004,'L05','公子别秀',2078); -~~~ - - 作品类型 - -~~~ sql -INSERT into type VALUES -('L01','玄幻'), -('L02','奇幻'), -('L03','武侠'), -('L04','仙侠'), -('L05','都市'); -~~~ - -~~~ sql --- 2. 将story 表中的story_name字段类型改成varchar(40) 。(2分) -ALTER TABLE story MODIFY story_name VARCHAR(40); --- 3. 在author表中增加一个性别字段 字段名:author_sex,类型: char(10),要求默认值为'男'。 (3分) -ALTER TABLE author add author_sex char(10) DEFAULT'男'; --- 4. 将作家编号为1005、1007的作家性别改为'女' 。(2分) -UPDATE author set author_sex='女' where author_id=1005 or author_id=1007; --- 5. 作家杜子腾,写了一篇名为《拜登夸我很帅》的都市小说,有854个浏览量,请将这条信息插入到story --- 表。(3分) -INSERT into story(author_id,type_id,story_name,views_number) VALUES (1005,'L05','拜登夸我很帅',854); --- 6. 《拖拉机大战蜘蛛侠》这篇小说,浏览量涨了100,请更新story表中的相关数据。(2分) -UPDATE story set views_number=views_number+100 where story_name='拖拉机大战蜘蛛侠'; --- 7. 请删除story表的中《皇上滚开本宫只劫财》这篇小说相关数据。(2分) -DELETE from story where story_name='皇上滚开本宫只劫财'; --- 8. 查询 浏览量大于 8000的小说的作者编号和小说作品名称。(2分) -SELECT author_id,story_name from story where views_number>8000; --- 9. 查询积分大于1000 并且会员等级高于vip03的作家所有信息。(3分 -SELECT * from author where credits>1000 and vip_id>'vip03'; --- 10. 查询姓名以杜字开头的作家的姓名,积分和等级编号。(3分) -SELECT * from author where author_name like '杜%'; --- 11. 查询积分在100、1000之间的作家信息,以积分降序排列。 (3分) -SELECT * from author where credits BETWEEN 100 and 1000 ORDER BY credits desc; --- 12. 查询出小说的总浏览量,最高浏览量,最小浏览量,平均浏览量,给字段用上中文别名。(3分) -SELECT sum(views_number) 总浏览量,max(views_number) 最高浏览量, min(views_number) 最小浏览量,avg(views_number)平均浏览量 from story; --- 13. 查询各种等级的作家的平均积分和作家数量,并对查询结果使用中文别名。(3分) -SELECT round(avg(credits),2),count(vip_id) from author GROUP BY vip_id; --- 14. 查询小说数量大于等于2的分类编号和小说数量。(4分) -SELECT author_id,count(author_id) a from story GROUP BY author_id HAVING a>=2; --- 15. 查询所有小说中浏览量最少的书的作品编号、作品名称和类型编号、浏览量。(4分) -SELECT story_id,story_name,type_id,min(views_number) from story; --- 16. 查询积分比刘产高的作者所有信息。(5分) -SELECT * from author where credits>(SELECT credits from author where author_name='刘产'); --- 17. 查询出哪些白银作家是没有写小说的,显示这些作家的姓名、等级名称。(8分 -select author_name 姓名,vip_name 等级名称 from vip v left join author a on v.vip_id=a.vip_id left join story s on a.author_id=s.author_id where story_id is null and vip_name='白银作家'; --- 18. 找出写过作品浏览量大于5000的作家的所有作品中浏览量不到1000的作品信息(8分) -select * from story where author_id =any (select author_id from story where views_number>5000) and views_number<1000; --- 19. 查询所有小说的小说编号、小说名称、浏览量、分类名称、作者姓名、作者积分、作者等级名称,结果 --- 字段要用中文别名,并按浏览量降序排列,如果浏览量一样的,再按积分降序排列。(10分 -select s.story_id 小说编号, s.story_name 小说名称, s.views_number 浏览量, t.type_id 分类名称, a.author_name 作者姓名, a.credits 作者积分, v.vip_name 作者等级 from story s left join type t on s.type_id=t.type_id left join author a on -s.author_id=a.author_id left join vip v on a.vip_id=v.vip_id order by views_number desc,credits desc -~~~ - - - diff --git "a/09 \346\233\271\346\255\243\346\263\242/20230215 MySQL\346\225\260\346\215\256\345\272\223\346\246\202\350\277\260.md" "b/09 \346\233\271\346\255\243\346\263\242/20230215 MySQL\346\225\260\346\215\256\345\272\223\346\246\202\350\277\260.md" deleted file mode 100644 index 3a0ce4ce7bdd3b881755360f169dc25dbddc0178..0000000000000000000000000000000000000000 --- "a/09 \346\233\271\346\255\243\346\263\242/20230215 MySQL\346\225\260\346\215\256\345\272\223\346\246\202\350\277\260.md" +++ /dev/null @@ -1,35 +0,0 @@ -## MySQL - -**使用**cmd命令连接数据库 - -mysql -h 主机名 -P 端口号 -u 用户名 -p密码(中间不能有空格) - -如果是连本机:-h 用户名可以省略,端口号未修改:-P 端口号也可以省略 - -简写成:mysql -u 用户名 -p密码 - -**查看**所有的数据库:show databases: - -**创建**数据库:create database 数据库名; - -**删除**数据库:drop database 数据库名; - -**使用**数据库:use 数据库名; - -**查看**数据库的所有表格:show table from 数据库名; - -**创建**新的表格:create table 表名称( - -​ 字段名 数据类型, - -​ 字段名 数据类型 - -​ ); - -**查看**已定义的表结构:dese 表名称; - -**添加**一条表记录:insert into 表名称 valuse(值列表); - -**查看**一个表的数据:select*from 表名称; - -**删除**表:drop table 表名称; \ No newline at end of file diff --git "a/09 \346\233\271\346\255\243\346\263\242/20230216 MySQL\346\225\260\346\215\256\345\272\223\346\225\260\346\215\256\347\261\273\345\236\213.md" "b/09 \346\233\271\346\255\243\346\263\242/20230216 MySQL\346\225\260\346\215\256\345\272\223\346\225\260\346\215\256\347\261\273\345\236\213.md" deleted file mode 100644 index db7f8fb0773c8514acbc0baef6ee9cf6640a9937..0000000000000000000000000000000000000000 --- "a/09 \346\233\271\346\255\243\346\263\242/20230216 MySQL\346\225\260\346\215\256\345\272\223\346\225\260\346\215\256\347\261\273\345\236\213.md" +++ /dev/null @@ -1,36 +0,0 @@ -char(m)为固定长度的字符串,默认储存1个字符,最大存储255 - -例:create table temp( - -​ c1 char(2) - -​ ); - -​ insert into temp valves('数据库');#失败 - -varchar(m)可变长度的字符串,m不可缺省必须指定m - -unsigned声明该数列不允许负数 - -zerofilll不足位数用零来填充(推荐和int一起使用) - -double双精度(适合存储小数) - -float单精度 - -int整数 - -decimal定点数默认是(10,0)四舍五入时5就是5 - -double和float四舍五入时5是无限接近于5 - -float(m,n)m表示限制整数+小数一共只能存放m位的长度 - -如果小数部分长度超过n,自动四舍五入 - -时间类型:date年月日,time时分秒,year年份,datetime日期时间 - -enum枚举类型,类似单选框只能选择其中一个 - -set集合,类似多选框,可以不选也可以选 - diff --git "a/09 \346\233\271\346\255\243\346\263\242/20230217 MySQL\346\225\260\346\215\256\345\272\223\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/09 \346\233\271\346\255\243\346\263\242/20230217 MySQL\346\225\260\346\215\256\345\272\223\345\270\270\347\224\250\345\221\275\344\273\244.md" deleted file mode 100644 index 3a5257c464dc7de21647ccfe9c3407bf53101a03..0000000000000000000000000000000000000000 --- "a/09 \346\233\271\346\255\243\346\263\242/20230217 MySQL\346\225\260\346\215\256\345\272\223\345\270\270\347\224\250\345\221\275\344\273\244.md" +++ /dev/null @@ -1,334 +0,0 @@ -# 笔记 - -if not exists 如果不存在 - -例:如果没有该名称的数据库则创建名为该名称的数据库,否则跳过 - -if existe 如果存在 - -例:如果该数据库存在则删除该数据库否则跳过 - -修改数据库的编码 - -alter database 数据库名 character set 新的数据库名; - -添加一个表字段 - -alter table 表名称 add 字段名 数据类型; - -删除一个字段 - -alter table 表名称 change 旧字段名 新字段名 数据类型; - -修改一个字段的数据类型 - -alter table 表名称 modify 字段名称 新数据类型; - -修改字段的位置顺序 - -alter table 表名称 modify 字段名称 数据类型 after 另一个字段; - -重命名表名称 - -alter table 旧表名称 rename to 新表名称; - -添加指定字段的赋值 - -insert into 表名称(字段列表)values(值列表); - -删除某个列的一行 - -delete from 表名称 where 条件; - -例:delete from stu where sid=777; - -删除列的数据 - -update 表名称 set 列名称=null; - -# 作业 - -## 第一题 - --- 1、创建数据库test01_market - create database test01_market; - use test01_market; --- 2、创建表格customers -create TABLE customers( -c_num int(11), -c_name VARCHAR(50), -c_comtact VARCHAR(50), -c_city VARCHAR(50), -c_birth DATE - -); - -| -- | 字段名 | 数据类型 | -| ------------------------------------------------------------ | --------- | ----------- | -| -- | c_num | int(11) | -| -- | c_name | varchar(50) | -| -- | c_contact | varchar(50) | -| -- | c_city | varchar(50) | -| -- | c_birth | date | -| -- | | | -| -- **要求3:**将c_contact字段移动到c_birth字段后面 | | | -| alter TABLE customers modify c_comtact VARCHAR(50) AFTER c_birth; | | | -| -- | | | -| -- **要求4:**将c_name字段数据类型改为 varchar(70) | | | -| ALTER TABLE customers MODIFY c_name VARCHAR(70); | | | -| -- | | | -| -- **要求5:**将c_contact字段改名为c_phone | | | -| ALTER TABLE customers CHANGE c_comtact c_phone VARCHAR(50); | | | -| -- | | | -| -- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) | | | -| ALTER TABLE customers add c_gender CHAR(1); | | | -| alter TABLE customers modify c_gender VARCHAR(50) AFTER c_name; | | | -| -- | | | -| -- **要求7:**将表名改为customers_info | | | -| ALTER TABLE customers rename to customers_info; | | | -| -- | | | -| -- **要求8:**删除字段c_city | | | -| ALTER TABLE customers_info DROP c_ity; | | | -| -- | | | -| -- ```mysql | | | -| -- | | | -| -- ``` | | | -| -- | | | - -## 第二题 - - - --- 1、创建数据库test02_library -create DATABASE test02_library; - -use test02_library; - --- 2、创建表格books -create table if not exists books( -b_id int(11) not null unique, -b_name VARCHAR(50) not null, -author VARCHAR(100) not null, -price float not null, -pubdate year not null, -note VARCHAR(100) null, -num int(11) not null - -); - -| -- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------------------------------------------------------------ | ------- | -------- | ------------- | -------- | ---- | -| -- | b_id | 书编号 | int(11) | 否 | 是 | -| -- | b_name | 书名 | varchar(50) | 否 | 否 | -| -- | author | 作者 | varchar(100) | 否 | 否 | -| -- | price | 价格 | float | 否 | 否 | -| -- | pubdate | 出版日期 | year | 否 | 否 | -| -- | note | 说明 | varchar(100) | 是 | 否 | -| -- | num | 库存 | int(11) | 否 | 否 | -| -- | | | | | | -| -- 3、向books表中插入记录 | | | | | | -| -- | | | | | | -| -- 1) 指定所有字段名称插入第一条记录 | | | | | | -| insert into books(b_id,b_name,author,price,pubdate,note,num) | | | | | | -| VALUES(1,'Tal of AAA','Dickes',23,1995,'novel',11); | | | | | | - --- --- 2)不指定字段名称插入第二记录 - -INSERT into books values(2,'EmmaT','Jane lura',35,1993,'joke',22); - --- 3)同时插入多条记录(剩下的所有记录) -insert into books(b_id,b_name,author,price,pubdate,note,num) VALUES -(3,'Story of Jane','Jane Tim',40,2001,'novel',0), -(4,'Lovey Day','George Byron',20,2005,'novel',30), -(5,'Old land','Honore Blade',30,2010,'law',0), -(6,'The Battle','Upton Sara',30,1999,'medicine',40), - -(7,'Rose Hood','Richard haggard',28,2008,'cartoon',28); - -| -- | b_id | b_name | author | price | pubdate | note | num | -| ------------------------------------------------------- | ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| -- | 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| -- | 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| -- | 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| -- | 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| -- | 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| -- | 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| -- | 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | -| -- | | | | | | | | -| -- 4、将小说类型(novel)的书的价格都增加5。 | | | | | | | | -| update books set price = price+5 WHERE note = 'novel'; | | | | | | | | -| -- | | | | | | | | -| -- 5、将名称为EmmaT的书的价格改为40。 | | | | | | | | -| UPDATE books set price=40 where b_name='EmmaT'; | | | | | | | | -| -- | | | | | | | | -| -- 6、删除库存为0的记录 | | | | | | | | -| delete from books where num=0; | | | | | | | | -| -- | | | | | | | | -| -- ```mysql | | | | | | | | -| -- | | | | | | | | -| -- ``` | | | | | | | | -| -- | | | | | | | | -| -- | | | | | | | | -| -- | | | | | | | | - -## 第三题 - --- 1、创建数据库test03_bookstore -create database test03_bookstore; -ALTER DATABASE test03_bookstore CHARACTER SET utf8 COLLATE utf8_general_ci; - -use test03_bookstore; - --- 2、创建book表 -drop table book; -create table book( -id int(11) PRIMARY KEY auto_increment, -title VARCHAR(100), -author varchar(100), -price DOUBLE(11,2), -sales int(11), -stock int(11), -img_path VARCHAR(100) - -); - --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | sales | int(11) | NO | | NULL | | --- | stock | int(11) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: -insert into book values(1,'解忧杂货店','东野圭吾',27.20,102,98,'upload/books/解忧杂货店.jpg'); - -insert into book values(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg'); - --- ```mysql --- +----+-------------+------------+-------+-------+-------+----------------------------+ --- | id | title | author | price | sales | stock | img_path | --- +----+-------------+------------+-------+-------+-------+-----------------------------+ --- | 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | --- | 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | --- +----+---------------+------------+-------+-------+-------+----------------------------+ --- ``` --- --- 3、创建用户表users,并插入数据 -create table users( -id int(11) PRIMARY KEY auto_increment, -username VARCHAR(100) unique, -passwor VARCHAR(100), -email VARCHAR(100) null - -); - --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | username | varchar(100) | NO | UNI | NULL | | --- | passwor | varchar(100) | NO | | NULL | | --- | email | varchar(100) | YES | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: - -insert into users values(1,'admin',112233,'admin@mxdx.com'); - --- ```mysql --- +----+----------+----------------------------------+--------------------+ --- | id | username | passwor | email | --- +----+----------+----------------------------------+--------------------+ --- | 1 | admin | 112233 | admin@mxdx.com | --- +----+----------+----------------------------------+--------------------+ --- ``` --- --- 4、创建订单表orders -create table orders( -id VARCHAR(100) PRIMARY key, -order_time datetime, -total_count int(11), -total_amount DOUBLE(11,2), -state int(11), -user_id int(11) - -); - --- ```mysql --- +--------------+--------------+------+-----+---------+-------+ --- | Field | Type | Null | Key | Default | Extra | --- +--------------+--------------+------+-----+---------+-------+ --- | id | varchar(100) | NO | PRI | NULL | | --- | order_time | datetime | NO | | NULL | | --- | total_count | int(11) | NO | | NULL | | --- | total_amount | double(11,2) | NO | | NULL | | --- | state | int(11) | NO | | NULL | | --- | user_id | int(11) | NO | MUL | NULL | | --- +--------------+--------------+------+-----+---------+-------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: - -insert into orders values(15294258455691,'2018-06-20 00:30:45',2,50.20,0,1); - --- ```mysql --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | id | order_time | total_count | total_amount | state | user_id | --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | --- +----------------+---------------------+-------------+--------------+-------+---------+ --- ``` --- --- 5、创建订单明细表order_items -create table order_items( -id int(11) PRIMARY KEY auto_increment, -count int(11), -amount DOUBLE(11,2), -title VARCHAR(100), -author varchar(100), -price double(11,2), -img_path VARCHAR(100), -order_id VARCHAR(100) - -); - --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | count | int(11) | NO | | NULL | | --- | amount | double(11,2) | NO | | NULL | | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- | order_id | varchar(100) | NO | MUL | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: -insert into order_items values -(1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg','15294258455691'); -insert into order_items values - -(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg','15294258455691'); - --- ```mysql --- +----+-------+--------+---------+---------+-------+----------------+----------------+ --- | id |count| amount| title | author | price | img_path | order_id | --- +----+-------+--------+------------+----------+-------+----------------+----------------+ --- | 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | --- | 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | --- +----+-------+--------+------------+----------+-------+------------+----------------+ - diff --git "a/09 \346\233\271\346\255\243\346\263\242/20230221 MySQK\346\225\260\346\215\256\345\272\223\347\272\246\346\235\237.md" "b/09 \346\233\271\346\255\243\346\263\242/20230221 MySQK\346\225\260\346\215\256\345\272\223\347\272\246\346\235\237.md" deleted file mode 100644 index 759b159bc93ca6c21513c36f19d6564a970547a6..0000000000000000000000000000000000000000 --- "a/09 \346\233\271\346\255\243\346\263\242/20230221 MySQK\346\225\260\346\215\256\345\272\223\347\272\246\346\235\237.md" +++ /dev/null @@ -1,397 +0,0 @@ -# 笔记 - -非空约束:not null - -默认约束:default 默认值 - -唯一约束:unique key,(值可以为空,但值不能重复) - -主键约束:primary key(默认非空,一个表只能有一个主键约束) - -复合主键primary key(字段名1,字段名2) 表示字段1和字段2的组合是唯一的 - -自增约束(和主键一起使用):auto_increment(不给值或者给0或NULL,会在列表最大值的基础上自增) - -删除唯一约束:alter table 表名称 drop index 索引名 - -删除主键约束:alter table 表名称 drop primary key; - -删除自增约束:alter table 表名称 modify 字段名 数据类型; - -添加自增约束:alter table 表名称 modify 字段名 数据类型 auto_increment; - -外键约束:foreign key - -例:create table 主表名称( - -字段1 数据类型 primary key, - -字段2 数据类型 - -); - -create table 从表名称( - -字段1 数据类型 primary key, - -字段2 数据类型, - -foreign key(从表字段) feferences 主表名(被参考字段) - -); - -从表字段的数据类型必须和主表名(被参考字段)数据类型一样。 - -# 作业 - -## 第一题 - - - --- 1、创建数据库test01_company -CREATE database test01_company - -use test01_company; - --- 2、创建表格offices -create table offices( -officeCode int, -city varchar(30), -address varchar(50), -country varchar(50), -postalCode VARCHAR(25) - -); - -| -- | 字段名 | 数据类型 | -| ------------------------------------------------------------ | ---------- | ------------- | -| -- | officeCode | int | -| -- | city | varchar(30) | -| -- | address | varchar(50) | -| -- | country | varchar(50) | -| -- | postalCode | varchar(25) | -| -- | | | -| -- 3、创建表格employees | | | -| create table employees( | | | -| empNum int(11), | | | -| lastName VARCHAR(50), | | | -| firstName VARCHAR(50), | | | -| mobile VARCHAR(25), | | | -| `code` int, | | | -| jobTitle VARCHAR(50), | | | -| birth date, | | | -| Note VARCHAR(255), | | | -| Sex VARCHAR(5) | | | -| ); | | | -| -- | | | -| -- | 字段名 | 数据类型 | -| -- | --------- | ------------- | -| -- | empNum | int(11) | -| -- | lastName | varchar(50) | -| -- | firstName | varchar(50) | -| -- | mobile | varchar(25) | -| -- | code | int | -| -- | jobTitle | varchar(50) | -| -- | birth | date | -| -- | Note | varchar(255) | -| -- | Sex | varchar(5) | -| -- | | | -| -- **要求4:**将表employees的mobile字段修改到code字段后面。 | | | -| alter table employees modify mobile VARCHAR(25) after code; | | | -| -- | | | -| -- **要求5:**将表employees的birth字段改名为birthday; | | | -| alter table employees change birth birthday date; | | | -| -- | | | -| -- **要求6:**修改sex字段,数据类型为char(1)。 | | | -| alter table employees modify sex char(1); | | | -| -- | | | -| -- **要求7:**删除字段note; | | | -| alter table employees drop note; | | | -| -- | | | -| -- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); | | | -| alter table employees add favoriate_activity VARCHAR(100); | | | -| -- | | | -| -- **要求9:**将表employees的名称修改为 employees_info | | | -| alter table employees rename to employees_info; | | | -| -- | | | -| -- ```mysql | | | -| -- | | | -| -- ``` | | | -| -- | | | -| -- | | | -| -- | | | - -## 第二题 - - - --- 1、创建数据库test02db -create database test02db; - -use test02db; - --- 2、创建表格pet -drop table pet; -create table pet( -`name` VARCHAR(20), -`owner` VARCHAR(20), - species VARCHAR(20), - sex char(1), - birth year, - death year - -); - -| -- | 字段名 | 字段说明 | 数据类型 | -| ------------------------------------------------------- | ------- | -------- | ----------- | -| -- | name | 宠物名称 | varchar(20) | -| -- | owner | 宠物主人 | varchar(20) | -| -- | species | 种类 | varchar(20) | -| -- | sex | 性别 | char(1) | -| -- | birth | 出生日期 | year | -| -- | death | 死亡日期 | year | -| -- | | | | -| -- 3、添加记录 | | | | -| insert into pet values | | | | -| ('Fluffy','harold','Cat','f',2003,2010), | | | | -| ('Claws','gwen','Cat','m',2004,null), | | | | -| ('Buffy',null,'Dog','f',2009,null), | | | | -| ('Fang','benny','Dog','m',2000,null), | | | | -| ('bowser','diane','Dog','m',2003,2009), | | | | -| ('Chirpy',null,'Bird','f',2008,null); | | | | -| -- | | | | -| -- | name | owner | species | -| -- | ------ | ------ | ------- | -| -- | Fluffy | harold | Cat | -| -- | Claws | gwen | Cat | -| -- | Buffy | | Dog | -| -- | Fang | benny | Dog | -| -- | bowser | diane | Dog | -| -- | Chirpy | | Bird | -| -- | | | | -| -- 4、 添加字段主人的生日owner_birth。 | | | | -| alter table pet add owner_birth int; | | | | -| -- | | | | -| -- 5、 将名称为Claws的猫的主人改为kevin | | | | -| update pet set `owner`='kevin' where name='Claws'; | | | | -| -- | | | | -| -- 6、 将没有死的狗的主人改为duck | | | | -| update pet set `owner`='duck' where death is null; | | | | -| -- | | | | -| -- 7、 查询没有主人的宠物的名字; | | | | -| select `owner` pet WHERE `owner` is null; | | | | -| -- | | | | -| -- 8、 查询已经死了的cat的姓名,主人,以及去世时间; | | | | -| select name,`owner`,death from pet WHERE species='Cat'; | | | | -| -- | | | | -| -- 9、 删除已经死亡的狗 | | | | -| delete from pet where species='Dog' and death='2009'; | | | | -| -- | | | | -| -- 10、查询所有宠物信息 | | | | -| select * from pet; | | | | -| -- | | | | -| -- ```sql | | | | -| -- | | | | -| -- ``` | | | | -| -- | | | | -| -- ## 第3题 | | | | -| -- | | | | - -## 第三题 - --- 1、创建数据库:test03_company -create database test03_company; - -use test03_company; - --- ```sql --- create database test03_company charset utf8; - --- ``` - --- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - --- A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - --- ```mysql --- use test03_company ; -create table department( -depid int primary key auto_increment, -depname char(10) not null unique key, -deinfo varchar(200) -); - --- ``` - --- B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - --- * 雇员编号为主键; --- * 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); - --- * 性别默认为男; - --- ```mysql -ALTER DATABASE test03_company CHARACTER SET utf8; -create table employee ( -empid int primary key auto_increment, -`name` varchar(10) not null, -sex enum('男','女') not null default'男', -title varchar(10), -birthday date, -depid int, -foreign key(depid) references department(depid) - -); - --- - --- C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - --- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) -create table salary( -empid int primary key, -basesalary double, -titlesalary double, -deduction double, -foreign key(empid) references employee(empid) - -); - --- 4、添加数据如下: - --- 部门表: -desc department; -show create table department; -alter table department convert to character set utf8; -insert into department values -(111,'生产部',null), -(222,'销售部',null), - -(333,'人事部','人力资源管理'); - -| -- | 部门编号 | 部门名称 | 部门简介 | -| ----------------------------------------------- | -------- | -------- | ------------ | -| -- | 111 | 生产部 | Null | -| -- | 222 | 销售部 | Null | -| -- | 333 | 人事部 | 人力资源管理 | -| -- | | | | -| -- 雇员表: | | | | -| insert into employee values | | | | -| (1001,'张三','男','高级工程师','1975-1-1',111), | | | | -| (1002,'李四','女','助师','1985-1-1',111), | | | | -| (1003,'王五','男','工程师','1978-11-11',222), | | | | -| (1004,'张六','男','工程师','1999-1-1',222); | | | | -| -- | | | | -| -- | 雇员编号 | 姓名 | 性别 | -| -- | -------- | ---- | ---- | -| -- | 1001 | 张三 | 男 | -| -- | 1002 | 李四 | 女 | -| -- | 1003 | 王五 | 男 | -| -- | 1004 | 张六 | 男 | -| -- | | | | -| -- 工资表: | | | | -| insert into salary values | | | | -| (1001,2200,1100,200), | | | | -| (1002,1200,200,null), | | | | -| (1003,2900,700,200), | | | | -| (1004,1950,700,150); | | | | -| -- | | | | -| -- | 雇员编号 | 基本工资 | 职务工资 | -| -- | -------- | -------- | -------- | -| -- | 1001 | 2200 | 1100 | -| -- | 1002 | 1200 | 200 | -| -- | 1003 | 2900 | 700 | -| -- | 1004 | 1950 | 700 | -| -- | | | | -| -- | | | | -| -- | | | | - -## 第四题 - - - --- 1、创建一个数据库:test04_school -create database test04_school; - -use test04_school; - --- 2、创建如下表格 -create table Department( -DepNo int(10) primary key not null unique, -DepName varchar(20) not null, -DepNote varchar(50) - -); - --- 表1 Department表的定义 - -| -- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| --------------------------------------------------------- | ---------- | ------------ | ------------------ | ---------- | --------- | ---------- | ------------ | -| -- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | -| -- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | -| -- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | -| -- | | | | | | | | -| -- 表2 Teacher表的定义 | | | | | | | | -| create table Teacher( | | | | | | | | -| Number int primary key not null unique, | | | | | | | | -| `Name` varchar(30) not null, | | | | | | | | -| Sex VARCHAR(4), | | | | | | | | -| Birth date, | | | | | | | | -| DepNo int, | | | | | | | | -| Salary float, | | | | | | | | -| Address VARCHAR(100), | | | | | | | | -| foreign key(DepNo) references Department(DepNo) | | | | | | | | -| ); | | | | | | | | -| -- | | | | | | | | -| -- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| -- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| -- | Number | 教工号 | int | 是 | 否 | 是 | 是 | -| -- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | -| -- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | -| -- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | -| -- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | -| -- | Salary | 工资 | float | 否 | 否 | 否 | 否 | -| -- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | -| -- | | | | | | | | -| -- 3、添加记录 | | | | | | | | -| alter table Department convert to character set utf8; | | | | | | | | -| insert into Department VALUES | | | | | | | | -| (601,'软件技术系','软件技术等专业'), | | | | | | | | -| (602,'网络技术系','多媒体技术等专业'), | | | | | | | | -| (603,'艺术设计系','广告艺术设计等专业'), | | | | | | | | -| (604,'管理工程系','连锁经营管理等专业'); | | | | | | | | -| -- | | | | | | | | -| -- | **DepNo** | **DepName** | **DepNote** | | | | | -| -- | --------- | ----------- | ------------------ | | | | | -| -- | 601 | 软件技术系 | 软件技术等专业 | | | | | -| -- | 602 | 网络技术系 | 多媒体技术等专业 | | | | | -| -- | 603 | 艺术设计系 | 广告艺术设计等专业 | | | | | -| -- | 604 | 管理工程系 | 连锁经营管理等专业 | | | | | -| alter table Teacher convert to character set utf8; | | | | | | | | -| insert into Teacher VALUES | | | | | | | | -| (2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'), | | | | | | | | -| (2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'), | | | | | | | | -| (2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'), | | | | | | | | -| (2004,'James','女','1980-10-20',602,3500,'四川省成都市'), | | | | | | | | -| (2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); | | | | | | | | -| -- | | | | | | | | -| -- | **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | -| -- | ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | -| -- | 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | -| -- | 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | -| -- | 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | -| -- | 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | -| -- | 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | -| -- | | | | | | | | -| -- 4、用SELECT语句查询Teacher表的所有记录。 | | | | | | | | -| select * from Teacher; | | | | | | | | -| -- | | | | | | | | -| -- ```mysql | | | | | | | | -| -- | | | | | | | | -| -- ``` | | | | | | | | -| -- | | | | | | | | -| -- | | | | | | | | -| -- | | | | | | | | -| -- | | | | | | | | -| -- | | | | | | | | -| -- | | | | | | | | diff --git "a/09 \346\233\271\346\255\243\346\263\242/20230223 MySQL\346\225\260\346\215\256\345\272\223\350\277\220\347\256\227\347\254\246.md" "b/09 \346\233\271\346\255\243\346\263\242/20230223 MySQL\346\225\260\346\215\256\345\272\223\350\277\220\347\256\227\347\254\246.md" deleted file mode 100644 index 8043d86e493284110a33ad1fb0e15bd1979baf7d..0000000000000000000000000000000000000000 --- "a/09 \346\233\271\346\255\243\346\263\242/20230223 MySQL\346\225\260\346\215\256\345\272\223\350\277\220\347\256\227\347\254\246.md" +++ /dev/null @@ -1,211 +0,0 @@ -# 笔记 - -select 字段列表 from 表名称; - -select 字段列表 from 表名称 where 条件; - -别名(该临时字段名) - -select 字段名1 as 别名1,字段2 as 别名2 from 表名称 as 别名; - -结果去重 distinct 只支持一个字段 - -select distinct 字段列表 from 表名称 [where 条件] - -运算符 - -div 只保留整数部分 - -例 select 9/2,9 div 2 - -结果4.5,4 - -等于=不能用于null, - -判断是null用is null或用<=>null - -判断不是null 用is not null - -查询信息 - -select * from 表名称 where 字段1 in(字段数据1,字段数据2); - -查询遇到null时 - -select ifnull(字段名,0)from 表名称; - -区间范围 - -字段名 between X and Y 包含两端的边界 - -集合范围(in) - -in(x,x,x) not in(x,x,x)不在此范围 - -查询在这字段的数据 - -select * from 表名称 where 字段名 in(字段数据) - -%代表任意字符 - -_代表一个字符 - -模糊查询用like - -# 作业 - --- ## 第1题:员工表 --- --- ```mysql --- drop table if exists `employee`; -create database yuan; -use yuan; - #创建employee表 - CREATE TABLE employee( -id INT, -`name` VARCHAR(20), -sex VARCHAR(20), -tel VARCHAR(20), -addr VARCHAR(50), -salary FLOAT - -); - --- #添加信息 -alter database yuan character set utf8; -alter table employee convert to character set utf8; -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); - --- - --- --- -| -- | **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------------------------------------------------------------ | ------ | -------- | ------- | ------------ | -------- | ---------- | -| -- | 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| -- | 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| -- | 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| -- | 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| -- | 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | -| -- | | | | | | | -| -- **要求1:**查询出薪资在12000~13000之间的员工信息。 | | | | | | | -| select * from employee where salary between 12000 and 13000; | | | | | | | -| -- | | | | | | | -| -- **要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 | | | | | | | -| select id,`name`,addr from employee where `name` like '刘%'; | | | | | | | -| -- | | | | | | | -| -- **要求3:**将“李四”的家庭住址改为“广东韶关” | | | | | | | -| update employee set addr='广东韶关' where `name`='李四'; | | | | | | | -| -- | | | | | | | -| -- **要求4:**查询出名字中带“小”的员工 | | | | | | | -| select * from employee where `name` like '%小%'; | | | | | | | -| -- | | | | | | | -| -- **要求5:**查询出薪资高于11000的男员工信息 | | | | | | | -| select * from employee where salary>11000; | | | | | | | -| -- | | | | | | | -| -- **要求6:**查询没有登记电话号码的员工 | | | | | | | -| select * from employee where tel is null; | | | | | | | -| -- | | | | | | | -| -- **要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 | | | | | | | -| select * from employee where (salary>12000 or addr='广东深圳' or addr='广东广州') and sex='男'; | | | | | | | -| -- | | | | | | | -| -- **要求8:**查询每个员工的年薪,显示“姓名、年薪” | | | | | | | -| select `name` as 姓名,salary * 12 as 年薪 from employee; | | | | | | | -| -- | | | | | | | -| -- ```mysql | | | | | | | -| -- | | | | | | | -| -- ``` | | | | | | | -| -- | | | | | | | - - - --- ## 第2题:国家信息表 --- --- countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 -create database guo charset utf8; - -use guo; - --- ```mysql --- DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( -`name` VARCHAR(100), -`continent` VARCHAR(100), -`area` INT, -population INT, -gdp BIGINT - -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); - --- ``` - --- 表数据样例: - --- ```mysql --- +-------------+-----------+---------+------------+--------------+ --- | name | continent | area | population | gdp | --- +-------------+-----------+---------+------------+--------------+ --- | Afghanistan | Asia | 652230 | 25500100 | 20343000000 | --- | Albania | Europe | 28748 | 2831741 | 12960000000 | --- | Algeria | Africa | 2381741 | 37100000 | 188681000000 | --- | Andorra | Europe | 468 | 78115 | 3712000000 | --- | Angola | Africa | 1246700 | 20609294 | 100990000000 | --- +-------------+-----------+---------+------------+--------------+ - --- ``` - --- **要求1:** 查询大国 的国家名称、人口和面积。 - -select `name`,area,population from `countries_info` where area>=3000000 or population>=25000000; - --- 如果一个国家满足下述两个条件之一,则认为该国是 大国 : - --- - 面积至少为 300万平方公里(即,3000000 km2) - --- - 人口至少为 2500 万(即 25000000) - ---要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -select * from `countries_info` where continent='Asia'; - --- **要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -select * from `countries_info` where area<10000 and population<100000; - --- **要求4:**查询国家名字中包含“o“字母的国家信息 - -select * from `countries_info` where `name` like '%o%'; - --- **要求5:**查询GDP值超过10000000000的国家信息 - -select * from `countries_info` where gdp>10000000000; - --- **要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -select `name`,population,gdp,gdp div population as 人均贡献GDP值 from `countries_info`; - --- **要求7:**查询人均贡献GDP值低于1000的国家信息。 - -select * from `countries_info` where (gdp div population)>1000; - --- **要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -select `name` as 国家名,area as 面积,population as 人口,area / population as 人均国土面积值 from `countries_info`; - --- ```mysql - --- ``` --- --- \ No newline at end of file diff --git "a/09 \346\233\271\346\255\243\346\263\242/20230228 MySQL\346\225\260\346\215\256\345\272\223\345\205\263\350\201\224\346\237\245\350\257\242.md" "b/09 \346\233\271\346\255\243\346\263\242/20230228 MySQL\346\225\260\346\215\256\345\272\223\345\205\263\350\201\224\346\237\245\350\257\242.md" deleted file mode 100644 index 7d3d570bea79e6c18a6389250b70c94b65410691..0000000000000000000000000000000000000000 --- "a/09 \346\233\271\346\255\243\346\263\242/20230228 MySQL\346\225\260\346\215\256\345\272\223\345\205\263\350\201\224\346\237\245\350\257\242.md" +++ /dev/null @@ -1,175 +0,0 @@ -# 笔记 - -Avg()平均值 Sum()求和 Max()最大值 - -Min()最小值 count()统计记录器 - -count(*)统计全部,count*(字段)统计非null的值 - -关联查询 - -内连接:a inner join b on a.字段=b.字段 ab相同数据 - -左全连接:a left join b on a.字段=b.字段 where a.字段 is null 不重复的a数据 - -右全连接:a right join b on a.字段=b.字段 where b.字段 is null 不重复的b数据 - -左连接:a left join b on a.字段=b.字段 全a数据 - -右连接:a right join b on a.字段=b.字段 全b数据 - - - -# 作业 - -```mysql -## 创建添加数据顺序 1,4,2,3 - -create database glcx charset utf8; -use glcx; -create table Student( -Sno varchar (20) not null primary key, -Sname varchar (20) not null, -Ssex varchar (20) not null, -Sbirthday datetime, -Class varchar (20) -); -create table Course( -Cno varchar (20) not null primary key, -Cname varchar (20) not null, -Tno varchar (20) not null, -foreign key(Tno) references Teacher(Tno) -); -create table Score( -Sno varchar (20) not null, -foreign key(Sno) references Student(Sno), -Cno varchar (20), -foreign key(Cno) references Course(Cno), -Degree Decimal(4,1) -); -create table Teacher( -Tno varchar (20) not null primary key, -Tname varchar (20) not null, -Tsex varchar (20) not null, -Tbirthday datetime, -Prof varchar (20), -Depart varchar (20) not null -); -insert into Student values -(108,'曾华','男','1977-9-1',95033), -(105,'匡明','男','1975-10-2',95031), -(107,'王丽','女','1976-1-23',95033), -(101,'李军','男','1976-2-20',95033), -(109,'王芳','女','1975-2-10',95031), -(103,'陆君','男','1974-6-3',95031); -insert into Course VALUES -('3-105','计算机导论',825), -('3-245','操作系统',804), -('6-166','数字电路',856), -('9-888','高等数学',831); -insert into Score VALUES -(103,'3-245',86), -(105,'3-245',75), -(109,'3-245',68), -(103,'3-105',92), -(105,'3-105',88), -(109,'3-105',76), -(101,'3-105',64), -(107,'3-105',91), -(108,'3-105',78), -(101,'6-166',85), -(107,'6-166',79), -(108,'6-166',81); -insert into Teacher VALUES -(804,'李诚','男','1958-12-2','副教授','计算机系'), -(856,'张旭','男','1969-3-12','讲师','电子工程系'), -(825,'王萍','女','1972-5-5','助教',' 计算机系'), -(831,'刘冰','女','1977-8-14','助教',' 电子工程系'); - --- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ -表1关联表3,表3关联表2 -select * from Student inner join Score inner join Course on -Student.Sno=Score.Sno and Score.Cno=Course.Cno; --- 2,查询没有学生的教师的所有信息 - --- 1.查询Score表中的最高分的学生学号和课程号。 -select Sno,Cno from Score; --- 2.查询所有学生的Sname、Cno和Degree列。 -select Student.Sname,Score.Cno,Score.Degree from -Score inner join Student on Student.Sno=Score.Sno; --- 3.查询所有学生的Sno、Cname和Degree列。 -select Score.Sno,Course.Cname,Score.Degree FROM -Course inner join Score on Course.Cno=Score.Cno; --- 4.查询所有学生的Sname、Cname和Degree列。 -select Student.Sname,Course.Cname,Score.Degree FROM -Student inner join Score inner join Course -on Score.Sno=Student.Sno and Score.Cno=Course.Cno; --- 5.查询“95033”班学生的平均分。 -select round(sum(Degree) / count(Class),1) 成绩 from Student inner join Score on -Score.Sno=Student.Sno where Class='95033'; --- 6.查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 -select * from Score where Cno='3-105' and degree>(sno='109'); --- 7.查询score中选学多门课程的同学中分数为非最高分成绩的记录。 - --- 8.查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 -select * from Student inner join Score inner join Course on -Student.Sno=Score.Sno and Score.Cno=Course.Cno where -(Score.Sno='109') (select avg(Degree) from Score); --- 17.查询所有任课教师的Tname和Depart. -select tname,Depart from Teacher inner join Course on -Course.Tno=Teacher.Tno -where -Teacher.Tno = Course.Tno; --- 18.查询所有未讲课的教师的Tname和Depart. -select tname,Depart from Teacher inner join Course on -Course.Tno=Teacher.Tno -where -not (Teacher.Tno = Course.Tno); --- 19.查询“男”教师及其所上的课程。 -select Tname,Cname from Teacher inner join Course on -Teacher.Tno=Course.Tno -where -Tsex='男'; --- 20.查询最高分同学的Sno、Cno和Degree列。 -select sno,cno,Degree from Score -WHERE -(select max(Degree) from Score); --- 21.查询和“李军”同性别的所有同学的Sname. -select sname from Student -where -Ssex=(select Ssex from Student where Sname='李军'); --- 22.查询和“李军”同性别并同班的同学Sname. -select sname from Student -where -Ssex=(select Ssex from Student where Sname='李军') -and -Class=(select Class from Student where Sname='李军'); --- 23.查询所有选修“计算机导论”课程的“男”同学的成绩表. -select Degree from Course inner join Score inner join Student on -Course.Cno=Score.Cno and Score.Sno=Student.Sno -where -Ssex='男' -and -Cname=(select Cname from Course where Cname='计算机导论') ; -``` - diff --git "a/09 \346\233\271\346\255\243\346\263\242/20230307 MySQL\346\225\260\346\215\256\345\272\223\345\255\220\346\237\245\350\257\242.md" "b/09 \346\233\271\346\255\243\346\263\242/20230307 MySQL\346\225\260\346\215\256\345\272\223\345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index 92d1ad789ee5e62cbb2be85977a983c1aebf79c9..0000000000000000000000000000000000000000 --- "a/09 \346\233\271\346\255\243\346\263\242/20230307 MySQL\346\225\260\346\215\256\345\272\223\345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,119 +0,0 @@ -# 笔记 - -单列单值可以放在select、where、having后面 - -多列多值只能放在where后面,用in、not in进行比较 - -# 作业 - -``` mysql -create database lianxi charset utf8; -use lianxi; -drop table stuinfo; -drop table stuExam; -create table stuinfo( -stuNO varchar(10) primary key, -stuName varchar(10), -stuSex char, -stuage int(3), -stuAddress varchar(5), -stuSeat int(2) -); -create table stuExam( -examNO int(2) primary key, -stuNO varchar(10), -foreign key(stuNO) references stuinfo(stuNO), -writtenExam int(3), -labExam int(3) -); -create table stuMarks( -examNO int(2), -foreign key(examNO) references stuExam(examNO), -stuID varchar(10), -score int(3) -); -insert into stuinfo VALUES -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'湖北武汉',2), -('s2503','马文才','男',18,'湖南长沙',3), -('s2504','欧阳俊雄','女',21,'湖北武汉',4), -('s2505','梅超风','男',16,'湖北武汉',5), -('s2506','陈旋风','男',19,'美国硅谷',6); -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); -insert into stuMarks values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); --- 1.查询出年龄比班上平均年龄大的学生的信息 -select * from stuinfo where stuage>(select avg(stuage) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -select a.stuNO,stuName,stuSex,score -from stuinfo a inner join stuMarks c on -a.stuNO=c.stuID -where score in (select max(score) from stuMarks group by stuID); --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -select a.stuNO,a.stuName,a.stuSex,(writtenExam+labExam)/2 -from stuinfo a left join stuExam b ON -a.stuNO=b.stuNO -where (writtenExam+labExam)/2 in (select (writtenExam+labExam)/2 from stuExam group by examNO); --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -select * from stuinfo where stuSex='男' and stuage>=20; - -select * from stuinfo -where stuSex in (select stuSex from stuinfo where stuSex='男') -and -stuage in (select stuage from stuinfo where stuage>=20); --- 5.查询出年龄比所有男生年龄都大的女生的信息 -select * from stuinfo where stuage in (select max(stuage) from stuinfo where stuSex='女' group by stuSex); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -select * from stuinfo a inner join stuExam b on -a.stuNO=b.stuNO -where b.writtenExam in (select b.writtenExam from stuExam where b.writtenExam>=60) -AND -b.labExam in (select b.labExam from stuExam where b.labExam>=60); --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select a.* from stuinfo a inner join stuExam b inner join stuMarks c ON -a.stuNO=b.stuNO and b.examNO=c.examNO -where a.stuNO in (select stuID from stuMarks group by stuID); --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select a.* from stuinfo a inner join stuExam b inner join stuMarks c ON -a.stuNO=b.stuNO and b.examNO=c.examNO -where a.stuNO not in (select stuID from stuMarks group by stuID); --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -select a.* from stuinfo a inner join stuMarks b on -a.stuNO=b.stuID -where score in (select score from stuMarks where score>=90 group by stuID); --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -select a.* from stuinfo a inner join stuMarks b on -a.stuNO=b.stuID -where score in (select avg(score) from stuMarks group by stuID) group by 'avg(score)'; --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) -select a.* from stuinfo a inner join stuMarks b on -a.stuNO=b.stuID -where -(select sum(score) from stuMarks where stuID='s2501') in -(select sum(score) from stuMarks where stuID!='s2501' group by stuID); --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) -select distinct a.* from stuinfo a right join stumarks b on a.stuno=b.stuID -where score > any -(select score from stuinfo a right join stumarks b on a.stuno=b.stuID where stuname='张秋利') and stuno != 's2501'; --- 13.查询班上比所有男生年龄都要大的女生的信息 -select * from stuinfo where stuage in (select max(stuage) from stuinfo where stuSex='女' group by stuSex); --- 14.查询出只要比某个男生年龄大的女生的信息 -select * from stuinfo -where stuage > any -(select stuage from stuinfo where stuSex='男') and stuSex='女'; - -``` - - - diff --git "a/09 \346\233\271\346\255\243\346\263\242/20230309 MySQL\346\225\260\346\215\256\345\272\223\345\244\247\344\275\234\344\270\232.md" "b/09 \346\233\271\346\255\243\346\263\242/20230309 MySQL\346\225\260\346\215\256\345\272\223\345\244\247\344\275\234\344\270\232.md" deleted file mode 100644 index f6d6ba46d2e9c6afbd6ebe9f97ceb377180d9bc7..0000000000000000000000000000000000000000 --- "a/09 \346\233\271\346\255\243\346\263\242/20230309 MySQL\346\225\260\346\215\256\345\272\223\345\244\247\344\275\234\344\270\232.md" +++ /dev/null @@ -1,185 +0,0 @@ -# 作业 - -### 练习2 - -```mysql -create database lianxi2 charset utf8; -use lianxi2; -drop table riqi; -create table riqi( -- 日期表 -orderID int primary key,-- 订单编号 -orderDate datetime -- 订购日期 -); -create table shuju( -- 订单数据表 -itemID int(2), -orderID int, -- 订单编号 -foreign key(orderID) references riqi(orderID), -itemType varchar(10), -- 产品类型 -itemName varchar(10), -- 产品名称 -theNumber int(2),-- 订购数量 -theMoney int(2) -- 订购单价 -); -insert into riqi values -(1,'2008-01-12 00:00:00.000'), -(2,'2008-02-10 00:00:00.000'), -(3,'2008-02-15 00:00:00.000'), -(4,'2008-03-10 00:00:00.000'); -insert into shuju 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); --- 根据图示,完成下列题目: - --- 1.查询所有的订单的订单的编号,订单日期,订购产品的类别和订购的产品名称,订购数量和订购单价 -select - a.orderID,a.orderDate,b.itemType,b.itemName,b.theNumber,b.theMoney - from riqi a right join shuju b on -a.orderID=b.orderID; - --- 2.查询订购数量大于50的订单的编号,订单日期,订购产品的类别和订购的产品名称 -select b.orderID,b.orderDate,a.itemType,a.itemName from shuju a right join riqi b on a.orderID=b.orderID -where a.theNumber in (select shuju.theNumber from shuju where shuju.theNumber>50); --- 3.查询所有的订单的订单的编号,订单日期,订购产品的类别和订购的产品名称,订购数量和订购单价以及订购总价 -select - a.orderID,a.orderDate,b.itemType,b.itemName,b.theNumber,b.theMoney,b.theNumber*b.theMoney 总价 - from riqi a right join shuju b on -a.orderID=b.orderID; --- 4.查询单价大于等于5 或者 数量大于等于50的订单的订单的编号,订单日期,订购产品的类别和订购的产品名称,订购数量和订购单价以及订购总价 -select - a.orderID,a.orderDate,b.itemType,b.itemName,b.theNumber,b.theMoney,b.theNumber*b.theMoney 总价 - from riqi a right join shuju b on -a.orderID=b.orderID -where b.theMoney=(select shuju.theMoney from shuju where shuju.theMoney>5)or b.theNumber>=50; --- 5.查询每个订单分别订购了几个产品,例如: --- 编号 订购产品数 --- 1 3 --- 2 4 -select shuju.orderID,count(shuju.itemName) - from shuju group by shuju.orderID; --- 6.查询每个订单里的每个类别的产品分别订购了几次和总数量,例如: -select a.orderID,a.itemType,count(*),sum(a.theNumber) -from shuju a -group by a.orderID,a.itemType --- 订单编号 产品类别 订购次数 总数量 --- --- 1 文具 2 82 --- 1 体育用品 1 1 --- 2 文具 2 56 --- 2 体育用品 1 2 --- 2 日常用品 1 -``` - -## 大作业 - -```mysql -create database xiaoshuo charset utf8; -use xiaoshuo; --- 2143 -create table author( -author_id int primary key, -author_name varchar(20) not null unique, -credits int, -vip_id varchar(20) not null, -foreign key(vip_id) references vip(vip_id) -); -create table vip( -vip_id varchar(20) primary key, -vip_name varchar(20) not null unique -); -create table story( -story_id int primary key auto_increment, -author_id int, -foreign key(author_id) references author(author_id), -type_id varchar(20), -foreign key(type_id) references type(type_id), -story_name varchar(50), -views_number int -); -create table type( -type_id varchar(20) primary key, -type_name varchar(20) not null unique -); -insert into author values - (1001,'朱逸群',600,'VIP02'), - (1002,'范建',8510,'VIP04'), - (1003,'史珍香',981,'VIP02'), - (1004,'范统',2364,'VIP02'), - (1005,'杜子腾',257,'VIP01'), - (1006,'刘产',678,'VIP02'), - (1007,'杜琦燕',438,'VIP03'); - insert into vip values - ('VIP01','青铜作家'), - ('VIP02','白银作家'), - ('VIP03','黄金作家'), - ('VIP04','钻石作家'); - insert into story values - (1,1002,'L03','母猪产后与护理师的二三事',6541), - (2,1005,'L04','拖拉机大战蜘蛛侠',563), - (3,1003,'L01','这只小龙虾不正经',8754), - (4,1006,'L04','一个爹爹三个娃',36354), - (5,1006,'L01','皇上滚开本宫只劫财',3674), - (6,1005,'L05','给长城贴瓷砖的小太监',6541), - (7,1003,'L03','不科学御兽',1257), - (8,1005,'L01','镜面管理局',3216), - (9,1004,'L02','关于我成为灭魂师之后',1147), - (10,1004,'L05','公子别秀',2078); -insert into type values - ('L01','玄幻'), - ('L02','奇幻'), - ('L03','武侠'), - ('L04','仙侠'), - ('L05','都市'); --- 1. 根据前面提供的表结构和表数据,创建数据库并分别创建这张四张表;并插入相关数据。(提醒:外键 --- 请注意建表顺序和插入数据的顺序) (30分) --- 2. 将story 表中的story_name字段类型改成varchar(40) 。(2分) -alter table story modify story_name varchar(40); --- 3. 在author表中增加一个性别字段 字段名:author_sex,类型: char(10),要求默认值为'男'。 (3分) -alter table author add author_sex char(10) DEFAULT '男'; --- 4. 将作家编号为1005、1007的作家性别改为'女' 。(2分) -update author set author_sex='女' where author_id='1005' or author_id='1007'; --- 5. 作家杜子腾,写了一篇名为《拜登夸我很帅》的都市小说,有854个浏览量,请将这条信息插入到story -insert into story values(11,1005,'L05','拜登夸我很帅',854); --- 表。(3分) --- 6. 《拖拉机大战蜘蛛侠》这篇小说,浏览量涨了100,请更新story表中的相关数据。(2分) -update story set views_number=views_number+100 where story_name='拖拉机大战蜘蛛侠'; --- 7. 请删除story表的中《皇上滚开本宫只劫财》这篇小说相关数据。(2分) -delete from story where story_name='皇上滚开本宫只劫财'; --- 8. 查询 浏览量大于 8000的小说的作者编号和小说作品名称。(2分) -select * from story where views_number>8000; --- 9. 查询积分大于1000 并且会员等级高于vip03的作家所有信息。(3分) -select * from author where credits>1000 and vip_id>'vip03'; --- 10. 查询姓名以杜字开头的作家的姓名,积分和等级编号。(3分) -select author_name,credits,vip_id from author where author_name like '杜%'; --- 11. 查询积分在100、1000之间的作家信息,以积分降序排列。 (3分) -select * from author where credits between 100 and 1000 order by credits desc; --- 12. 查询出小说的总浏览量,最高浏览量,最小浏览量,平均浏览量,给字段用上中文别名。(3分) -select sum(views_number) 总浏览量,max(views_number) 最高浏览量,min(views_number) 最小浏览量,avg(views_number) 平均浏览量 from story; --- 13. 查询各种等级的作家的平均积分和作家数量,并对查询结果使用中文别名。(3分) -select vip_id 作家等级,avg(credits) 平均积分,count(author_name) 作家数量 from author group by vip_id; --- 14. 查询小说数量大于等于2的分类编号和小说数量。(4分) -select type_id,count(type_id) 小说数量 from story where type_id>='L02' group by type_id; --- 15. 查询所有小说中浏览量最少的书的作品编号、作品名称和类型编号、浏览量。(4分) -select story_id,story_name,type_id,views_number from story where views_number = (select min(views_number) from story); --- 16. 查询积分比刘产高的作者所有信息。(5分) -select * from author where credits > (select credits from author where author_name='刘产'); --- 17. 查询出哪些白银作家是没有写小说的,显示这些作家的姓名、等级名称。(8分) -select author_name,vip_name from vip v right join author a on v.vip_id=a.vip_id left join story s on a.author_id=s.author_id where story_id is null and vip_name='白银作家'; --- 18. 找出写过作品浏览量大于5000的作家的所有作品中浏览量不到1000的作品信息(8分) -select * from story where author_id in (select author_id from story where views_number>5000) and views_number<1000; --- 19. 查询所有小说的小说编号、小说名称、浏览量、分类名称、作者姓名、作者积分、作者等级名称,结果 --- 字段要用中文别名,并按浏览量降序排列,如果浏览量一样的,再按积分降序排列。(10分) - -``` - diff --git "a/10 \346\270\251\350\264\265\351\233\257/DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" "b/10 \346\270\251\350\264\265\351\233\257/DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" deleted file mode 100644 index 10d2b111c09dc3f312b09bbbef955224d9a3ccde..0000000000000000000000000000000000000000 --- "a/10 \346\270\251\350\264\265\351\233\257/DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" +++ /dev/null @@ -1,423 +0,0 @@ -## 第1题 - -1、创建数据库test01_market - -2、创建表格customers - -| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date | - -**要求3:**将c_contact字段移动到c_birth字段后面 - -**要求4:**将c_name字段数据类型改为 varchar(70) - -**要求5:**将c_contact字段改名为c_phone - -**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -**要求7:**将表名改为customers_info - -**要求8:**删除字段c_city - -答案: - -```mysql --- 1、创建数据库test01_market -create database test01_maeket charset utf8; --- --- 2、创建表格customers -use test01_maeket; -create table customers( -c_num int(11), -c_name varchar(50), -c_contact varchar(50), -c_city varchar(50), -c_birth date -); --- --- | 字段名 | 数据类型 | --- | --------- | ----------- | --- | c_num | int(11) | --- | c_name | varchar(50) | --- | c_contact | varchar(50) | --- | c_city | varchar(50) | --- | c_birth | date | --- --- **要求3:**将c_contact字段移动到c_birth字段后面 -alter table customers modify c_contact varchar(50) after c_birth; --- --- **要求4:**将c_name字段数据类型改为 varchar(70) -alter table customers modify c_name varchar(70); --- --- **要求5:**将c_contact字段改名为c_phone -alter table customers change c_contact c_phone varchar(50); --- --- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -alter table customers add c_gender char(1) after c_name; --- --- **要求7:**将表名改为customers_info -alter table customers rename to customers_info; --- --- **要求8:**删除字段c_city -alter table customers_info drop column c_city; -``` - -## 第2题 - -1、创建数据库test02_library - -2、创建表格books - -| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------- | ---- | ------------ | ---- | --- | -| b_id | 书编号 | int(11) | 否 | 是 | -| b_name | 书名 | varchar(50) | 否 | 否 | -| authors | 作者 | varchar(100) | 否 | 否 | -| price | 价格 | float | 否 | 否 | -| pubdate | 出版日期 | year | 否 | 否 | -| note | 说明 | varchar(100) | 是 | 否 | -| num | 库存 | int(11) | 否 | 否 | - -3、向books表中插入记录 - -1) 指定所有字段名称插入第一条记录 - -2)不指定字段名称插入第二记录 - -3)同时插入多条记录(剩下的所有记录) - -| b_id | b_name | authors | price | pubdate | note | num | -| ---- | ------------- | --------------- | ----- | ------- | -------- | --- | -| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -4、将小说类型(novel)的书的价格都增加5。 - -5、将名称为EmmaT的书的价格改为40。 - -6、删除库存为0的记录 - -答案: - -```mysql --- 1、创建数据库test02_library -create database test02_library charset utf8; --- --- 2、创建表格books -use test02_library; -create table books( -b_id int(11), -b_name varchar(50), -authors varchar(100), -price float, -pubdate year, -note varchar(100), -num int(11) -); --- --- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | --- | ------- | -------- | ------------- | -------- | ---- | --- | b_id | 书编号 | int(11) | 否 | 是 | --- | b_name | 书名 | varchar(50) | 否 | 否 | --- | authors | 作者 | varchar(100) | 否 | 否 | --- | price | 价格 | float | 否 | 否 | --- | pubdate | 出版日期 | year | 否 | 否 | --- | note | 说明 | varchar(100) | 是 | 否 | --- | num | 库存 | int(11) | 否 | 否 | --- --- 3、向books表中插入记录 --- --- 1) 指定所有字段名称插入第一条记录 -insert into books (b_id,b_name,authors,price,pubdate,note,num) values (1,'TalofAAA','Dickes',23,'1995','nove1',11); --- --- 2)不指定字段名称插入第二记录 -insert into books values (2,'EmmaT','janelure',35,'1993','joke',22); --- --- 3)同时插入多条记录(剩下的所有记录) -insert into books values (3,'StoryofJane','JaneTim',40,'2001','novel',0),(4,'LoveyDay','GeorgeByron',20,'2005','novel',30),(5,'Oldland','HonoreBlade',30,'2010','law',0),(6,'TheBattle','UptonSara',30,'1999','medicine',40),(7,'RoseHood','Richardhaggard',28,'2008','cartoon',28); --- --- | b_id | b_name | authors | price | pubdate | note | num | --- | ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | --- | 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | --- | 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | --- | 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | --- | 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | --- | 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | --- | 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | --- | 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | --- --- 4、将小说类型(novel)的书的价格都增加5。 -update books set price = price+5 where note='novel'; --- --- 5、将名称为EmmaT的书的价格改为40。 -update books set price = 40 where b_name='EmmaT'; --- --- 6、删除库存为0的记录 -delete from books where num=0; -``` - -## 第3题 - -1、创建数据库test03_bookstore - -2、创建book表 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| sales | int(11) | NO | | NULL | | -| stock | int(11) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------------+------------+-------+-------+-------+----------------------------+ -| id | title | author | price | sales | stock | img_path | -+----+-------------+------------+-------+-------+-------+-----------------------------+ -| 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | -| 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | -+----+---------------+------------+-------+-------+-------+----------------------------+ -``` - -3、创建用户表users,并插入数据 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| username | varchar(100) | NO | UNI | NULL | | -| password | varchar(100) | NO | | NULL | | -| email | varchar(100) | YES | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+----------+----------------------------------+--------------------+ -| id | username | password | email | -+----+----------+----------------------------------+--------------------+ -| 1 | admin | 112233 | admin@mxdx.com | -+----+----------+----------------------------------+--------------------+ -``` - -4、创建订单表orders - -```mysql -+--------------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+--------------+--------------+------+-----+---------+-------+ -| id | varchar(100) | NO | PRI | NULL | | -| order_time | datetime | NO | | NULL | | -| total_count | int(11) | NO | | NULL | | -| total_amount | double(11,2) | NO | | NULL | | -| state | int(11) | NO | | NULL | | -| user_id | int(11) | NO | MUL | NULL | | -+--------------+--------------+------+-----+---------+-------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----------------+---------------------+-------------+--------------+-------+---------+ -| id | order_time | total_count | total_amount | state | user_id | -+----------------+---------------------+-------------+--------------+-------+---------+ -| 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | -+----------------+---------------------+-------------+--------------+-------+---------+ -``` - -5、创建订单明细表order_items - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| count | int(11) | NO | | NULL | | -| amount | double(11,2) | NO | | NULL | | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -| order_id | varchar(100) | NO | MUL | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------+--------+---------+---------+-------+----------------+----------------+ -| id |count| amount| title | author | price | img_path | order_id | -+----+-------+--------+------------+----------+-------+----------------+----------------+ -| 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | -| 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | -+----+-------+--------+------------+----------+-------+------------+----------------+ -``` - -答案: - -```mysql --- 1、创建数据库test03_bookstore -create database test03_bookstore charset utf8; --- --- 2、创建book表 -use test03_bookstore; -create table book( -id int(11), -title varchar(100), -author varchar(100), -price double(11,2), -sales int(11), -stock int(11), -img_path varchar(100) -); --- --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | sales | int(11) | NO | | NULL | | --- | stock | int(11) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----+-------------+------------+-------+-------+-------+----------------------------+ --- | id | title | author | price | sales | stock | img_path | --- +----+-------------+------------+-------+-------+-------+-----------------------------+ --- | 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | --- | 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | --- +----+---------------+------------+-------+-------+-------+----------------------------+ --- ``` -insert into book values (1,'解忧杂货店','东野圭吾',27.2,102,98,'upload/books/解忧杂货店.jpg'),(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg'); --- --- 3、创建用户表users,并插入数据 -create table users( -id int(11), -unername varchar(100), -password varchar(100), -email varchar(100) -); --- --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | username | varchar(100) | NO | UNI | NULL | | --- | password | varchar(100) | NO | | NULL | | --- | email | varchar(100) | YES | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----+----------+----------------------------------+--------------------+ --- | id | username | password | email | --- +----+----------+----------------------------------+--------------------+ --- | 1 | admin | 112233 | admin@mxdx.com | --- +----+----------+----------------------------------+--------------------+ --- ``` -insert into users values (1,'admin','112233','admin@mxdx.com'); --- --- 4、创建订单表orders -create table orders( -id varchar(100), -order_time datetime, -total_count int(11), -total_amount double(11,2), -state int(11), -user_id int(11) -); --- --- ```mysql --- +--------------+--------------+------+-----+---------+-------+ --- | Field | Type | Null | Key | Default | Extra | --- +--------------+--------------+------+-----+---------+-------+ --- | id | varchar(100) | NO | PRI | NULL | | --- | order_time | datetime | NO | | NULL | | --- | total_count | int(11) | NO | | NULL | | --- | total_amount | double(11,2) | NO | | NULL | | --- | state | int(11) | NO | | NULL | | --- | user_id | int(11) | NO | MUL | NULL | | --- +--------------+--------------+------+-----+---------+-------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | id | order_time | total_count | total_amount | state | user_id | --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | --- +----------------+---------------------+-------------+--------------+-------+---------+ --- ``` -insert into orders values ('15294258455691','2018-06-20 00:30:45',2,50.20,0,1); --- --- 5、创建订单明细表order_items -create table order_items( -id int(11), -count int(11), -amount double(11,2), -title varchar(100), -author varchar(100), -price double(11,2), -img_path varchar(100), -order_id varchar(100) -); --- --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | count | int(11) | NO | | NULL | | --- | amount | double(11,2) | NO | | NULL | | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- | order_id | varchar(100) | NO | MUL | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----+-------+--------+---------+---------+-------+----------------+----------------+ --- | id |count| amount| title | author | price | img_path | order_id | --- +----+-------+--------+------------+----------+-------+----------------+----------------+ --- | 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | --- | 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | --- +----+-------+--------+------------+----------+-------+------------+----------------+ --- ``` -insert into order_items values (1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg','15294258455691'),(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg','15294258455691'); --- -``` diff --git "a/11 \351\202\271\344\272\250\344\274\237/20230309.md" "b/11 \351\202\271\344\272\250\344\274\237/20230309.md" deleted file mode 100644 index 3c19249a2f35b6d8278040d414878e7bd2e1af78..0000000000000000000000000000000000000000 --- "a/11 \351\202\271\344\272\250\344\274\237/20230309.md" +++ /dev/null @@ -1,156 +0,0 @@ -``` -create database xiaoshuo charset utf8; -use xiaoshuo; -1 -create table author( -author_id int primary key, -author_name varchar(20) not null unique, -credits int, -vip_id varchar(20) not null, -foreign key(vip_id) references vip(vip_id) -); -2 -create table vip( -vip_id varchar(20) primary key, -vip_name varchar(20) not null unique -); -3 -create table story( -story_id int primary key auto_increment, -author_id int, -foreign key(author_id) references author(author_id), -type_id varchar(20), -foreign key(type_id) references type(type_id), -story_name varchar(50), -views_number int -); -4 -create table type( -type_id varchar(20) primary key, -type_name varchar(20) not null unique -); -insert into author values - (1001,'朱逸群',600,'VIP02'), - (1002,'范建',8510,'VIP04'), - (1003,'史珍香',981,'VIP02'), - (1004,'范统',2364,'VIP02'), - (1005,'杜子腾',257,'VIP01'), - (1006,'刘产',678,'VIP02'), - (1007,'杜琦燕',438,'VIP03'); - insert into vip values - ('VIP01','青铜作家'), - ('VIP02','白银作家'), - ('VIP03','黄金作家'), - ('VIP04','钻石作家'); - insert into story values - (1,1002,'L03','母猪产后与护理师的二三事',6541), - (2,1005,'L04','拖拉机大战蜘蛛侠',563), - (3,1003,'L01','这只小龙虾不正经',8754), - (4,1006,'L04','一个爹爹三个娃',36354), - (5,1006,'L01','皇上滚开本宫只劫财',3674), - (6,1005,'L05','给长城贴瓷砖的小太监',6541), - (7,1003,'L03','不科学御兽',1257), - (8,1005,'L01','镜面管理局',3216), - (9,1004,'L02','关于我成为灭魂师之后',1147), - (10,1004,'L05','公子别秀',2078); -insert into type values - ('L01','玄幻'), - ('L02','奇幻'), - ('L03','武侠'), - ('L04','仙侠'), - ('L05','都市'); -``` - --- 1. 根据前面提供的表结构和表数据,创建数据库并分别创建这张四张表;并插入相关数据。(提醒:外键 --- 请注意建表顺序和插入数据的顺序) (30分) --- 2. 将story 表中的story_name字段类型改成varchar(40) 。(2分) - -``` -alter table story modify story_name varchar(40); -``` - --- 3. 在author表中增加一个性别字段 字段名:author_sex,类型: char(10),要求默认值为'男'。 (3分) - -``` -alter table author add author_sex char(10) DEFAULT '男'; -``` - --- 4. 将作家编号为1005、1007的作家性别改为'女' 。(2分) - -``` -update author set author_sex='女' where author_id='1005' or author_id='1007'; -``` - --- 5. 作家杜子腾,写了一篇名为《拜登夸我很帅》的都市小说,有854个浏览量,请将这条信息插入到story --- 表。(3分) - -``` -insert into story values(11,1005,'L05','拜登夸我很帅',854); -``` - --- 6. 《拖拉机大战蜘蛛侠》这篇小说,浏览量涨了100,请更新story表中的相关数据。(2分) - -``` -update story set views_number=views_number+100 where story_name='拖拉机大战蜘蛛侠'; -``` - --- 7. 请删除story表的中《皇上滚开本宫只劫财》这篇小说相关数据。(2分) - -``` -delete from story where story_name='皇上滚开本宫只劫财'; -``` - --- 8. 查询 浏览量大于 8000的小说的作者编号和小说作品名称。(2分) - -``` -select * from story where views_number>8000; -``` - --- 9. 查询积分大于1000 并且会员等级高于vip03的作家所有信息。(3分) - -``` -SELECT * FROM author where credits>1000 and vip_id>'vip03'; -``` - --- 10. 查询姓名以杜字开头的作家的姓名,积分和等级编号。(3分) - -``` -select author_name,credits,vip_id from author where author_name like '杜_%'; -``` - --- 11. 查询积分在100、1000之间的作家信息,以积分降序排列。 (3分) - -``` -select * from author where credits between 100 and 1000 order by credits desc; -``` - --- 12. 查询出小说的总浏览量,最高浏览量,最小浏览量,平均浏览量,给字段用上中文别名。(3分) - -``` -select sum(views_number) 总浏览量,max(views_number) 最高浏览量,min(views_number) 最小浏览量,avg(views_number) 平均浏览量 from story; -``` - --- 13. 查询各种等级的作家的平均积分和作家数量,并对查询结果使用中文别名。(3分) --- 14. 查询小说数量大于等于2的分类编号和小说数量。(4分) - -``` -select type_id,count(type_id) 小说数量 from story where type_id>='L02' group by type_id; -``` - --- 15. 查询所有小说中浏览量最少的书的作品编号、作品名称和类型编号、浏览量。(4分) --- 16. 查询积分比刘产高的作者所有信息。(5分) - -``` -select * from author where credits > (select credits from author where author_name='刘产'); -``` - --- 17. 查询出哪些白银作家是没有写小说的,显示这些作家的姓名、等级名称。(8分) - --- 18. 找出写过作品浏览量大于5000的作家的所有作品中浏览量不到1000的作品信息(8分) - -``` -select * from story where author_id in (select author_id from story where views_number>5000) and views_number<1000; -``` - --- 19. 查询所有小说的小说编号、小说名称、浏览量、分类名称、作者姓名、作者积分、作者等级名称,结果 --- 字段要用中文别名,并按浏览量降序排列,如果浏览量一样的,再按积分降序排列。(10分) \ No newline at end of file diff --git "a/11 \351\202\271\344\272\250\344\274\237/2023zouye.md" "b/11 \351\202\271\344\272\250\344\274\237/2023zouye.md" deleted file mode 100644 index 3b0460c3c0637c5d9fbcb362fdf115c308a50432..0000000000000000000000000000000000000000 --- "a/11 \351\202\271\344\272\250\344\274\237/2023zouye.md" +++ /dev/null @@ -1,105 +0,0 @@ -# 作业 - -``` -CREATE DATABASE wee; -ALTER DATABASE wee charset utf8; -USE wee; -CREATE TABLE Student( - Sno varchar (20) primary key, -Sname varchar (20) not null, -Ssex varchar (20)not null, -Sbirthday datetime, -Class varchar (20) -); -CREATE TABLE Teacher ( -Tno varchar (20) primary key, -Tname varchar (20) not null, -Tsex varchar (20) not null, -Tbirthday datetime, -Prof varchar (20), -Depart varchar (20) not null -); -ALTER TABLE Student charset utf8; -CREATE TABLE Course( -Cno varchar (20) primary key, -Cname varchar (20) not null, -Tno varchar (20),foreign key (tno) references teacher (tno) -); -CREATE TABLE Score( -Sno varchar (20), foreign key (sno) references student(sno), -Cno varchar (20),foreign key (cno) references course(cno), -Degree Decimal(4,1) -); - -INSERT INTO Student(Sno,Sname,Ssex,Sbirthday,class) -VALUES -(108,'曾华','男','1977-9-1',95033), -(105,'匡明','男','1975-10-2',95031), -(107,'王丽','女','1976-1-23',95033), -(101,'李军','男','1976-2-20',95033), -(109,'王芳','女','1975-2-10',95031), -(103,'陆君','男','1974-6-3',95031); -INSERT INTO Course(Cno,Cname,Tno) -VALUES -('3-105','计算机导论','825'), -('3-245','操作系统','804'), -('6-166','数字电路','856'), -('9-888','高等数学','831'); -INSERT INTO Teacher(Tno,Tname,Tsex,Tbirthday,Prof,Depart) -VALUES -('804','李诚','男','1958-12-2','副教授','计算机系'), -('856','张旭','男','1969-3-12','讲师','电子工程系'), -('825','王萍','女','1972-5-5','助教','计算机系'), -('831','刘冰','女','1977-8-14','助教','电子工程系'); -INSERT INTO Score(Sno,Cno,Degree) -VALUES -('103','3-245','86'), -('105','3-245','75'), -('109','3-245','68'), -('103','3-105','92'), -('105','3-105','88'), -('109','3-105','76'), -('101','3-105','64'), -('107','3-105','91'), -('108','3-105','78'), -('101','6-166','85'), -('107','6-166','79'), -('108','6-166','81'); --- 4.查询 --- ① 查询Score表中的最高分的学生学号和课程号。 -SELECT Degree,Sno FROM Score; --- ② 查询所有学生的Sname、Cno和Degree列。 -select Student.Sname,Score.Cno,Score.Degree from -Score inner join Student on Student.Sno=Score.Sno; --- ③ 查询所有学生的Sno、Cname和Degree列。 - SELECT Student.Sno,Course.Cname,Score.Degree FROM Student,Course,Score; -select Student.Sname,Score.Cno,Score.Degree from -Score inner join Student on Student.Sno=Score.Sno; --- ④ 查询所有学生的Sname、Cname和Degree列。 --- SELECT Student.Sname,Course.Cname,Score.Degree FROM --- Score inner JOIN Student ON tudent.Sno-Score.Sno; -select Score.Sno,Course.Cname,Score.Degree FROM -Course inner join Score on Course.Cno=Score.Cno; --- ⑤ 查询“95033”班学生的平均分。 -select round(sum(Degree) / count(Class),1) 成绩 from Student inner join Score on -Score.Sno=Student.Sno where Class='95033'; --- ⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 --- ⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 --- ⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 --- ⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 --- ⑩ 查询“张旭“教师任课的学生成绩。 --- ⑪ 查询选修某课程的同学人数多于5人的教师姓名。 --- ⑫ 查询出“计算机系“教师所教课程的成绩表。 --- ⑬ 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 --- ⑭ 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 --- ⑮ 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. --- ⑯ 查询成绩比该课程平均成绩低的同学的成绩表。 --- ⑰ 查询所有任课教师的Tname和Depart. --- ⑱ 查询所有未讲课的教师的Tname和Depart. --- ⑲ 查询“男”教师及其所上的课程。 --- ⑳ 查询最高分同学的Sno、Cno和Degree列。 --- 21 查询和“李军”同性别的所有同学的Sname. --- 22 查询和“李军”同性别并同班的同学Sname. --- 23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 -``` - diff --git "a/11 \351\202\271\344\272\250\344\274\237/3.7\344\275\234\344\270\232.md" "b/11 \351\202\271\344\272\250\344\274\237/3.7\344\275\234\344\270\232.md" deleted file mode 100644 index ea31326aae30a4780e3b934ce64923a3d1d2a617..0000000000000000000000000000000000000000 --- "a/11 \351\202\271\344\272\250\344\274\237/3.7\344\275\234\344\270\232.md" +++ /dev/null @@ -1,89 +0,0 @@ -create database text1; -use text1; -alter database text1 charset utf8; -alter table stuinfo charset utf8; -alter table stuExam charset utf8; -alter table stuMarks charset utf8; - -create table stuinfo( -stuNO varchar(10) primary key, -stuName varchar(10), -stuSex varchar(5), -stuAge double, -stuAddress varchar(20), -stuSeat int auto_increment unique -); -create table stuExam( -examNo int primary key, -stuNO varchar(10), -writtenExam varchar(10), -labExam double, -foreign key(stuNo) references stuinfo(stuNo) -); -create table stuMarks( -examNO int, -stuID varchar(10), -score double, -foreign key(examNO) references stuExam(examNO) -); -insert into stuinfo values -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'湖北武汉',2), -('s2503','马文才','男',18,'湖南长沙',3), -('s2504','欧阳俊雄','女',21,'湖北武汉',4), -('s2505','梅超风','男',16,'湖北武汉',5), -('s2506','陈旋风','男',19,'美国硅谷',6); -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); -insert into stuMarks values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); --- 1.查询出年龄比班上平均年龄大的学生的信息 -SELECT * FROM stuinfo -WHERE stuAge> -(SELECT avg(stuAge) FROM stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) - --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -SELECT * FROM stuinfo; -SELECT * FROM stuExam; -select si.stuNO,stuname,stusex,round((avg(se.writtenExam+se.labExam)/2),2) -from -stuinfo si,stuexam se where si.stuNO=se.stuNO group by stuno; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -1 -select * from stuinfo -where stuSex='男' and stuage >='20'; --- 5.查询出年龄比所有男生年龄都大的女生的信息 -select * from -stuinfo where -stuage > all (select stuage from stuinfo where stuSex='男') and stuSex='女'; - - 6.查询出所有选修课程都及格的学生的信息 (stuMarks) - - 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - - 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -select * from -stuinfo where stuno in(select stuid from stumarks where score >'90'); --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -select * from stuinfo where stuno =(select stuid from(select stuid, avg(score) a from stumarks group by stuid) s where a>80); --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) -- - - 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) - --- 13.查询班上比所有男生年龄都要大的女生的信息 - --- 14.查询出只要比某个男生年龄大的女生的信息 \ No newline at end of file diff --git "a/12 \346\236\227\344\277\212\344\274\237/20230217 MySQL\347\232\204\347\231\273\345\205\245\345\222\214\345\256\211\350\243\205.md" "b/12 \346\236\227\344\277\212\344\274\237/20230217 MySQL\347\232\204\347\231\273\345\205\245\345\222\214\345\256\211\350\243\205.md" deleted file mode 100644 index 484ecca627cfbf6f2acb43b2b5bf3b52f80d11fd..0000000000000000000000000000000000000000 --- "a/12 \346\236\227\344\277\212\344\274\237/20230217 MySQL\347\232\204\347\231\273\345\205\245\345\222\214\345\256\211\350\243\205.md" +++ /dev/null @@ -1,69 +0,0 @@ -* 双击`mysql-installer-community-5.7.28.0.msi`,进入安装界面后选择**Custom自定义安装**,点击**Next** - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装1.jpg) - -* 在左侧目录中选择**MySQL Server 5.7.28 -X64**,点击`→`加载到右侧,在选择一下要安装的产品名,在右下角会出现**Advanced Options,单击它可以设置安装路径** - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装2.jpg) - -* 例如将**安装路径**和**数据路径**修改到`D:\develop\`下,点击**OK**。注意,**安装目录避免空格和中文** - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装3.jpg) - - - -* 点击**Next下一步** - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装4.jpg) - - - -* 点击**Execute执行安装** - - 有的可能会出现提示需要先安装C++动态库等,那就先安装C++动态库,没有提示说明操作系统中有你需要的动态库。 - - ![image-20200921082804582](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/image-20200921082804582.png) - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装6.jpg) - -* 安装完成,点击**Next下一步** - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装7.jpg) - -* 点击**Next下一步** - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装8.jpg) - -* 点击**Next下一步** - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装9.jpg) - -* 将MySQL配置类型选择**Development Computer开发电脑设置**,点击**Next下一步** - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装10.jpg) - -* 设置MySQL密码,因为管理员用户为root,学习初期建议将MySQL数据库密码也设置为root,设置完成后,点击**Next下一步** - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装11.jpg) - -* 设置**Windows Service 系统服务**,设置完毕后点击**Next下一步** - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装12.jpg) - -* 日志设置,不做任何修改,点击**Next下一步** - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装13.jpg) - -* 高级设置,不做任何修改,点击**Next下一步** - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装14.jpg) - -* 点击**Execute执行设置** - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装15.jpg) - -* 安装完成,点击**Finish完成** - - ![](F:/数据库/MySQL 第一课/MySQL5.7安装文档.assets/MySQL安装16.jpg) - -## \ No newline at end of file diff --git "a/12 \346\236\227\344\277\212\344\274\237/20230219 MySQL\347\254\224\350\256\260.md" "b/12 \346\236\227\344\277\212\344\274\237/20230219 MySQL\347\254\224\350\256\260.md" deleted file mode 100644 index 0675ff8a79d9e22f7172bec4f334119013cb2f91..0000000000000000000000000000000000000000 --- "a/12 \346\236\227\344\277\212\344\274\237/20230219 MySQL\347\254\224\350\256\260.md" +++ /dev/null @@ -1,57 +0,0 @@ -# MySQL笔记 - -ddl:create alter drop 定义 - -dml:insert into update delete 数据操作语言 - -dql:数据查询语言 select - -### 语法 - -不分大小写, - -一般以分号结尾, - -不要用关键字作名称 - ------------------------------------------------------------------------------------------------------------------------------------------ - -数据库 - -~~~ mysql -show databases; -- 查询所有数据库 -show databases(); -- 查询当前数据库 -create database if not exists 数据库名称;-- 如果数据库存在则不创建 -use 数据库名称; -drop database if exists 数据库名称 ; -~~~ - -表格 - -~~~ mysql -create tables 表名( -字段1 字段类型 【comment 字段1注释】, -字段2 字段类型 【comment 字段2注释】, -字段3 字段类型 【comment 字段3注释】 -)【comment 表注释】;-- 表格创建语句 最后一字段不需要加逗号 -drop table if exists 表名; -- 删除表 -desc 表名;-- 查询表结构 -show tables; -- 查询当前数据库所有表格 -show create tables 表名; -- 查询创建表语句 -~~~ - -数据类型 - -~~~ mysql -整数类型:int -小数类型:float double (浮点) decimal(定点) -日期时间:year time data -字符串型:vachar(固定长度) char(可变长度) -~~~ - -vachar没有默认值,所以一定要写长度。字符串不能超过所写的长度。 - -char默认长度为1 - - - diff --git "a/12 \346\236\227\344\277\212\344\274\237/20230219 MySQL\347\254\254\344\270\200,\344\272\214\346\254\241\344\275\234\344\270\232.md" "b/12 \346\236\227\344\277\212\344\274\237/20230219 MySQL\347\254\254\344\270\200,\344\272\214\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index 3dc8cfc0aa95d5abcfe41ea5c73030a3560d4812..0000000000000000000000000000000000000000 --- "a/12 \346\236\227\344\277\212\344\274\237/20230219 MySQL\347\254\254\344\270\200,\344\272\214\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,365 +0,0 @@ -02月19日 - -1、创建数据库test01_market - -1.CREATE DATABASE test01_market -1.use test01_market - -2、创建表格customers - -| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date | - -2.CREATE TABLE customers( -c_num int(11), -c_name VARCHAR(50), -c_contact VARCHAR(50), -c_city VARCHAR(50), -c_birth date -) - -**要求3:**将c_contact字段移动到c_birth字段后面 - -3.alter table customers modify c_contact VARCHAR(50) after c_birth; - -**要求4:**将c_name字段数据类型改为 varchar(70) - -4.ALTER TABLE customers MODIFY c_name VARCHAR(70); - -**要求5:**将c_contact字段改名为c_phone - -5.ALTER TABLE customers change c_contact c_phone VARCHAR(50); - -**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -6.ALTER TABLE customers add c_gender char(1); - -**要求7:**将表名改为customers_info - -7.ALTER TABLE customers RENAME to customers_info; - -**要求8:**删除字段c_city - -8.ALTER TABLE customers_info DROP COLUMN c_city; - -第二题 - --- 1、创建数据库test02_library - -CREATE DATABASE test02_library; -USE test02_library; - --- 2、创建表格books - -CREATE TABLE books( -b_id int(11) not null, -b_name VARCHAR(50) not null, -author VARCHAR(100) not null, -price FLOAT not null, -pubdate year not null, -note VARCHAR(100) null, -num int(11) not null -); - -| -- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------------------------- | ------- | -------- | ------------- | -------- | ---- | -| -- | b_id | 书编号 | int(11) | 否 | 是 | -| -- | b_name | 书名 | varchar(50) | 否 | 否 | -| -- | authors | 作者 | varchar(100) | 否 | 否 | -| -- | price | 价格 | float | 否 | 否 | -| -- | pubdate | 出版日期 | year | 否 | 否 | -| -- | note | 说明 | varchar(100) | 是 | 否 | -| -- | num | 库存 | int(11) | 否 | 否 | -| -- | | | | | | -| -- 3、向books表中插入记录 | | | | | | - --- 1) 指定所有字段名称插入第一条记录 - -INSERT INTO books( -b_id, -b_name, -author, -price, -pubdate, -note, -num -) -values (1,'Tal of AAA','Dickes',23,'1995','novel',11); -select * from books; - --- 2)不指定字段名称插入第二记录 - -insert into books values(2,'EmmaT','Jane lura',35,1993,'joke',22); -select * from books; - --- 3)同时插入多条记录(剩下的所有记录) - -insert into books values -(3,'Story of Jane','Jane Tim',40,'2001','novel',0), -(4,'Lovey Day','George Byron',20,'2005','novel',30), -(5,'Old land','Honore Blade',30,'2010','law',0), -(6,'The Battle','Upton Sara',30,'1999','medicine',40), -(7,'Rose Hood','Richard haggard',28,'2008','cartoon',28); -select * from books; - - - -| -- | b_id | b_name | authors | price | pubdate | note | num | -| ---- | ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| -- | 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| -- | 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| -- | 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| -- | 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| -- | 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| -- | 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| -- | 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -| -- 4、将小说类型(novel)的书的价格都增加5。 | | | | | | | | -| --------------------------------------------------- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -| update books set price=price+5 where note='novel'; | | | | | | | | -| select * from books; | | | | | | | | -| -- 5、将名称为EmmaT的书的价格改为40。 | | | | | | | | -| update books set price=40 where b_name='EmmaT'; | | | | | | | | -| select * from books; | | | | | | | | -| -- 6、删除库存为0的记录1、创建数据库test02_library | | | | | | | | -| delete from books where num=0; | | | | | | | | -| select * from books; | | | | | | | | - --- ## 第1题 02月21日 --- --- 1、创建数据库test01_company -CREATE DATABASE test01_company; --- 2、创建表格offices -USE test01_company; -CREATE TABLE test01_company( -officeCode INT, -city VARCHAR(30), -address VARCHAR(50), -country VARCHAR(50), -postalCode VARCHAR(25) -); -| -- | 字段名 | 数据类型 | -| ------------------------------------------------------------ | ---------- | ------------- | -| -- | officeCode | int | -| -- | city | varchar(30) | -| -- | address | varchar(50) | -| -- | country | varchar(50) | -| -- | postalCode | varchar(25) | -| -- | | | -| -- 3、创建表格employees | | | -| CREATE TABLE employees( | | | -| empNum INT(11), | | | -| lastName VARCHAR(50), | | | -| firstName VARCHAR(50), | | | -| mobile VARCHAR(25), | | | -| `code` int, | | | -| jobTitle VARCHAR(50), | | | -| birth date, | | | -| Note VARCHAR(255), | | | -| Sex VARCHAR(5) | | | -| ); | | | -| -- | 字段名 | 数据类型 | -| -- | --------- | ------------- | -| -- | empNum | int(11) | -| -- | lastName | varchar(50) | -| -- | firstName | varchar(50) | -| -- | mobile | varchar(25) | -| -- | code | int | -| -- | jobTitle | varchar(50) | -| -- | birth | date | -| -- | Note | varchar(255) | -| -- | Sex | varchar(5) | -| -- | | | -| -- **要求4:**将表employees的mobile字段修改到code字段后面。 | | | -| ALTER TABLE employees MODIFY mobile VARCHAR(25) after `code`; | | | -| -- **要求5:**将表employees的birth字段改名为birthday; | | | -| ALTER TABLE employees CHANGE birth birthday date; | | | -| -- **要求6:**修改sex字段,数据类型为char(1)。 | | | -| ALTER TABLE employees MODIFY Sex char(1); | | | -| -- **要求7:**删除字段note; | | | -| ALTER TABLE employees DROP note; | | | -| -- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); | | | -| ALTER TABLE employees add favoriate_activity VARCHAR(100); | | | -| -- **要求9:**将表employees的名称修改为 employees_info | | | -| ALTER TABLE employees RENAME to employees_info; | | | -| -- ## 第2题 | | | -| -- | | | -| -- 1、创建数据库test02db | | | -| CREATE DATABASE test02db; | | | -| -- 2、创建表格pet | | | -| use test02db; | | | -| CREATE TABLE pet( | | | -| `name` varchar(20) COMMENT '宠物名称', | | | -| `owner`varchar(20) COMMENT '宠物主人', | | | -| species varchar(20) COMMENT '种类', | | | -| sex char(1) COMMENT '性别', | | | -| birth YEAR COMMENT '出生日期', | | | -| death YEAR COMMENT'死亡日期' | | | -| ) COMMENT '表格2注释'; | | | -| -- | 字段名 | 字段说明 | -| -- | ------- | -------- | -| -- | name | 宠物名称 | -| -- | owner | 宠物主人 | -| -- | species | 种类 | -| -- | sex | 性别 | -| -- | birth | 出生日期 | -| -- | death | 死亡日期 | -| -- | | | -| -- 3、添加记录 | | | -| INSERT into pet VALUES('Fluffy','harold','Cat','f',2003,2010),('Claws','gwen','Cat','m',2004,NULL),('Buffy',NULL,'Dog','f',2009,NULL),('Fang','benny','Dog','m',2000,NULL),('bowser','diane','Dog','m',2003,2009),('Chirpy',NULL,'Bird','f',2008,NULL); | | | -| -- | name | owner | -| -- | ------ | ------ | -| -- | Fluffy | harold | -| -- | Claws | gwen | -| -- | Buffy | | -| -- | Fang | benny | -| -- | bowser | diane | -| -- | Chirpy | | -| -- | | | -| -- 4、 添加字段主人的生日owner_birth。 | | | -| ALTER TABLE pet add owner_birth date; | | | -| -- 5、 将名称为Claws的猫的主人改为kevin | | | -| UPDATE pet SET `owner`='kevin' WHERE `name`='Claws'; | | | -| -- 6、 将没有死的狗的主人改为duck | | | -| update pet set `owner`='duck' WHERE `death`IS NULL; | | | -| -- 7、 查询没有主人的宠物的名字; | | | -| SELECT `name` FROM pet where `owner` IS null; | | | -| -- 8、 查询已经死了的cat的姓名,主人,以及去世时间; | | | -| select `name`,`owner`,death from pet WHERE species='Cat'; | | | -| -- 9、 删除已经死亡的狗 | | | -| delete from pet where species='Dog' and death='2009'; | | | -| -- 10、查询所有宠物信息 | | | -| select * from pet; | | | -| -- ```sql | | | -| -- | | | -| -- ``` | | | -| -- | | | -| -- ## 第3题 | | | -| -- | | | -| -- 1、创建数据库:test03_company | | | -| create database test03_company; | | | -| -- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 | | | -| -- | | | -| -- A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 | | | -| -- | | | -| -- ```mysql | | | -| use test03_company ; | | | -| create table department( | | | - depid int primary key auto_increment, - depname char(10) not null unique key, - deinfo varchar(200) - -- ) --- ``` --- --- B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 --- --- * 雇员编号为主键; --- * 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); --- * 性别默认为男; --- --- ```mysql --- create table employee ( --- empid int primary key auto_increment, --- name varchar(10) not null, --- sex enum('男','女') not null default '男', --- title varchar(10), --- birthday date, --- depid int foreign key references department(depid) --- ) --- ``` --- --- C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 --- --- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) --- --- 4、添加数据如下: --- --- 部门表: --- -| -- | 部门编号 | 部门名称 | 部门简介 | -| ----------------------------------------------------------- | ---------- | ------------ | ------------------ | -| -- | 111 | 生产部 | Null | -| -- | 222 | 销售部 | Null | -| -- | 333 | 人事部 | 人力资源管理 | -| -- | | | | -| -- 雇员表: | | | | -| -- | | | | -| -- | 雇员编号 | 姓名 | 性别 | -| -- | -------- | ---- | ---- | -| -- | 1001 | 张三 | 男 | -| -- | 1002 | 李四 | 女 | -| -- | 1003 | 王五 | 男 | -| -- | 1004 | 张六 | 男 | -| -- | | | | -| -- 工资表: | | | | -| -- | | | | -| -- | 雇员编号 | 基本工资 | 职务工资 | -| -- | -------- | -------- | -------- | -| -- | 1001 | 2200 | 1100 | -| -- | 1002 | 1200 | 200 | -| -- | 1003 | 2900 | 700 | -| -- | 1004 | 1950 | 700 | -| -- | | | | -| -- | | | | -| -- | | | | -| -- ## 第4题 | | | | -| -- | | | | -| -- 1、创建一个数据库:test04_school | | | | -| CREATE DATABASE test04_school; | | | | -| -- 2、创建如下表格 | | | | -| use test04_school; | | | | -| CREATE TABLE Department( | | | | -| DepNo int(10) COMMENT '部门号' PRIMARY KEY not null UNIQUE, | | | | -| DepName VARCHAR(20) COMMENT '部门名称' not null, | | | | -| DepNote VARCHAR(50) COMMENT '部门备注' | | | | -| ); | | | | -| -- 表1 Department表的定义 | | | | -| -- | | | | -| -- | **字段名** | **字段描述** | **数据类型** | -| -- | ---------- | ------------ | ------------ | -| -- | DepNo | 部门号 | int(10) | -| -- | DepName | 部门名称 | varchar(20) | -| -- | DepNote | 部门备注 | Varchar(50) | -| -- | | | | -| -- 表2 Teacher表的定义 | | | | -| -- | | | | -| -- | **字段名** | **字段描述** | **数据类型** | -| -- | ---------- | ------------ | ------------ | -| -- | Number | 教工号 | int | -| -- | Name | 姓名 | varchar(30) | -| -- | Sex | 性别 | varchar(4) | -| -- | Birth | 出生日期 | date | -| -- | DepNo | 部门号 | int | -| -- | Salary | 工资 | float | -| -- | Address | 家庭住址 | varchar(100) | -| -- | | | | -| -- 3、添加记录 | | | | -| -- | | | | -| -- | **DepNo** | **DepName** | **DepNote** | -| -- | --------- | ----------- | ------------------ | -| -- | 601 | 软件技术系 | 软件技术等专业 | -| -- | 602 | 网络技术系 | 多媒体技术等专业 | -| -- | 603 | 艺术设计系 | 广告艺术设计等专业 | -| -- | 604 | 管理工程系 | 连锁经营管理等专业 | -| -- | | | | -| -- | **Number** | **Name** | **Sex** | -| -- | ---------- | -------- | ------- | -| -- | 2001 | Tom | 女 | -| -- | 2002 | Lucy | 男 | -| -- | 2003 | Mike | 男 | -| -- | 2004 | James | 女 | -| -- | 2005 | Jack | 男 | -| -- | | | | -| -- 4、用SELECT语句查询Teacher表的所有记录。 | | | | -| -- | | | | -| -- ```mysql | | | | -| -- | | | | -| -- ``` | | | | - - - diff --git "a/12 \346\236\227\344\277\212\344\274\237/20230223 MySQL\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.md" "b/12 \346\236\227\344\277\212\344\274\237/20230223 MySQL\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index b4aff7390d72f35c87b0c48aad90de05c652dd74..0000000000000000000000000000000000000000 --- "a/12 \346\236\227\344\277\212\344\274\237/20230223 MySQL\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,125 +0,0 @@ -## 第1题:员工表 - -```mysql -drop table if exists `employee`; -CREATE DATABASE a; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - - - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - --- **要求1:**查询出薪资在12000~13000之间的员工信息。 - -SELECT * FROM employee where salary BETWEEN 12000 and 13000; - --- **要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -select addr,name,id from employee where name like "刘%"; - --- **要求3:**将“李四”的家庭住址改为“广东韶关” - -UPDATE employee set addr="广东韶关" where name='李四'; - --- **要求4:**查询出名字中带“小”的员工 - -SELECT * FROM employee WHERE name like "%小%"; - --- **要求5:**查询出薪资高于11000的男员工信息 - -SELECT * FROM employee where salary>11000; - --- **要求6:**查询没有登记电话号码的员工 - -SELECT * FROM employee where tel is null; - --- **要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -SELECT * FROM employee where salary>12000 && sex = '男'; - --- **要求8:**查询每个员工的年薪,显示“姓名、年薪” - -SELECT name 名字,salary 薪 FROM employee; - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -DROP TABLE IF EXISTS `countries_info`; -CREATE DATABASE b; -use b; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -表数据样例: - -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ - --- **要求1:** 查询大国 的国家名称、人口和面积。 - --- 如果一个国家满足下述两个条件之一,则认为该国是 大国 : --- --- - 面积至少为 300万平方公里(即,3000000 km2) --- --- - 人口至少为 2500 万(即 25000000) - select `name`,population,area from countries_info where area>3000000 or population>25000000; --- **要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - select * from countries_info where continent='asia'; --- **要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 -select * from countries_info where area<10000 and population<100000; --- **要求4:**查询国家名字中包含“o“字母的国家信息 -select * from countries_info where `name` like '%o%'; --- **要求5:**查询GDP值超过10000000000的国家信息 -select `name` 国家名,population 人口,gdp GDP值,gdp/population 人均贡献GDP值 from countries_info; --- **要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” -select `name` 国家名,population 人口,gdp GDP值,gdp/population 人均贡献GDP值 from countries_info; --- **要求7:**查询人均贡献GDP值低于1000的国家信息。 -select * from countries_info where gdp/population<1000; - - - diff --git "a/12 \346\236\227\344\277\212\344\274\237/20230301 MySQL\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.md" "b/12 \346\236\227\344\277\212\344\274\237/20230301 MySQL\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index 4432669a9815e84d0b4bdc30df0cc9b92a04be8a..0000000000000000000000000000000000000000 --- "a/12 \346\236\227\344\277\212\344\274\237/20230301 MySQL\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,202 +0,0 @@ -\1. 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。 - -**2.** ***\*数据库的表结构\**** - -表(一)Student (学生表) - -| 属性名 | 数据类型 | 可否为空 | 含义 | -| --------- | ------------ | -------- | ------------ | -| Sno | varchar (20) | 否 | 学号(主码) | -| Sname | varchar (20) | 否 | 学生姓名 | -| Ssex | varchar (20) | 否 | 学生性别 | -| Sbirthday | datetime | 可 | 学生出生年月 | -| Class | varchar (20) | 可 | 学生所在班级 | - -表(二)Course(课程表) - -| 属性名 | 数据类型 | 可否为空 | 含义 | -| ------ | ------------ | -------- | ---------------- | -| Cno | varchar (20) | 否 | 课程号(主码) | -| Cname | varchar (20) | 否 | 课程名称 | -| Tno | varchar (20) | 否 | 教工编号(外码) | - -表(三)Score(成绩表) - -| 属性名 | 数据类型 | 可否为空 | 含义 | -| -------------- | ------------ | -------- | -------------- | -| Sno | varchar (20) | 否 | 学号(外码) | -| Cno | varchar (20) | 否 | 课程号(外码) | -| Degree | Decimal(4,1) | 可 | 成绩 | -| 主码:Sno+ Cno | | | | - -表(四)Teacher(教师表) - -| 属性名 | 数据类型 | 可否为空 | 含义 | -| --------- | ------------ | -------- | ---------------- | -| Tno | varchar (20) | 否 | 教工编号(主码) | -| Tname | varchar (20) | 否 | 教工姓名 | -| Tsex | varchar (20) | 否 | 教工性别 | -| Tbirthday | datetime | 可 | 教工出生年月 | -| Prof | varchar (20) | 可 | 职称 | -| Depart | varchar (20) | 否 | 教工所在部门 | - -**3.** ***\*数据库中的数据\****: - --- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ - --- 2,查询没有学生的教师的所有信息 - - - - - -表(一)Student - -| Sno | Sname | Ssex | Sbirthday | class | -| ---- | ----- | ---- | --------- | ----- | -| 108 | 曾华 | 男 | 1977-9-1 | 95033 | -| 105 | 匡明 | 男 | 1975-10-2 | 95031 | -| 107 | 王丽 | 女 | 1976-1-23 | 95033 | -| 101 | 李军 | 男 | 1976-2-20 | 95033 | -| 109 | 王芳 | 女 | 1975-2-10 | 95031 | -| 103 | 陆君 | 男 | 1974-6-3 | 95031 | - -表(二)Course - -| Cno | Cname | Tno | -| ----- | ---------- | ---- | -| 3-105 | 计算机导论 | 825 | -| 3-245 | 操作系统 | 804 | -| 6-166 | 数字电路 | 856 | -| 9-888 | 高等数学 | 831 | - -表(三)Score - -| Sno | Cno | Degree | -| ---- | ----- | ------ | -| 103 | 3-245 | 86 | -| 105 | 3-245 | 75 | -| 109 | 3-245 | 68 | -| 103 | 3-105 | 92 | -| 105 | 3-105 | 88 | -| 109 | 3-105 | 76 | -| 101 | 3-105 | 64 | -| 107 | 3-105 | 91 | -| 108 | 3-105 | 78 | -| 101 | 6-166 | 85 | -| 107 | 6-166 | 79 | -| 108 | 6-166 | 81 | - -表(四)Teacher - -| Tno | Tname | Tsex | Tbirthday | Prof | Depart | -| ---- | ----- | ---- | --------- | ------ | ---------- | -| 804 | 李诚 | 男 | 1958-12-2 | 副教授 | 计算机系 | -| 856 | 张旭 | 男 | 1969-3-12 | 讲师 | 电子工程系 | -| 825 | 王萍 | 女 | 1972-5-5 | 助教 | 计算机系 | -| 831 | 刘冰 | 女 | 1977-8-14 | 助教 | 电子工程系 | - -\4. 查询 - -CREATE DATABASE zy4; -use zy4; -CREATE TABLE Student( -Sno varchar (20) not NULL PRIMARY KEY, -Sname varchar (20) not NULL, -Ssex varchar (20) NOT NULL, -Sbirthday datetime null , -Class varchar (20) null -); -create table Course( -Cno varchar (20) primary key, -Cname varchar (20) not null, -Tno varchar (20) not null, -foreign key(Tno) references Teacher(Tno) -); -create table Score( -Sno varchar (20) not null, -Cno varchar (20) not null, -Degree Decimal(4,1) null, -foreign key(Sno) references Student(Sno), -foreign key(Cno) references Course(Cno) -); -alter table student charset utf8; -alter table course charset utf8; -alter table score charset utf8; -alter table Teacher charset utf8; -insert into Student values -('108','曾华','男','1977-9-1','95033'), -('105','匡明','男','1975-10-2','95031'), -('107','王丽','女','1976-1-23','95033'), -('101','李军','男','1976-2-20','95033'), -('109','王芳','女','1975-2-10','95031'), -('103','陆君','男','1974-6-3','95031'); -insert into Course(Cno,Cname,Tno) values -('3-105','计算机导论','825'), -('3-245','操作系统','804'), -('6-166','数字电路','856'), -('9-888','高等数学','831'); -insert into Teacher(Tno,Tname,Tsex,Tbirthday,Prof,Depart) values -('804','李诚','男','1958-12-2','副教授','计算机系'), -('856','张旭','男','1969-3-12','讲师','电子工程系'), -('825','王萍','女','1972-5-5','助教','计算机系'), -('831','刘冰','女','1977-8-14','助教','电子工程系'); -insert into Score(Sno,Cno,Degree) values -('103','3-245','86'), -('105','3-245','75'), -('109','3-245','68'), -('103','3-105','92'), -('105','3-105','88'), -('109','3-105','76'), -('101','3-105','64'), -('107','3-105','91'), -('108','3-105','78'), -('101','6-166','85'), -('107','6-166','79'), -('108','6-166','81'); - -① 查询Score表中的最高分的学生学号和课程号。 - -② 查询所有学生的Sname、Cno和Degree列。 - -③ 查询所有学生的Sno、Cname和Degree列。 - -④ 查询所有学生的Sname、Cname和Degree列。 - -⑤ 查询“95033”班学生的平均分。 - -⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 - -⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 - -⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 - -⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 - -⑩ 查询“张旭“教师任课的学生成绩。 - -⑪ 查询选修某课程的同学人数多于5人的教师姓名。 - -⑫ 查询出“计算机系“教师所教课程的成绩表。 - -⑬ 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 - -⑭ 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 - -⑮ 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. - -⑯ 查询成绩比该课程平均成绩低的同学的成绩表。 - -⑰ 查询所有任课教师的Tname和Depart. - -⑱ 查询所有未讲课的教师的Tname和Depart. - -⑲ 查询“男”教师及其所上的课程。 - -⑳ 查询最高分同学的Sno、Cno和Degree列。 - -21 查询和“李军”同性别的所有同学的Sname. - -22 查询和“李军”同性别并同班的同学Sname. - -23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 \ No newline at end of file diff --git "a/12 \346\236\227\344\277\212\344\274\237/20230307 MySQL\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.md" "b/12 \346\236\227\344\277\212\344\274\237/20230307 MySQL\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index dcc43c635b428a1b5bd27787c0c96d094471f962..0000000000000000000000000000000000000000 --- "a/12 \346\236\227\344\277\212\344\274\237/20230307 MySQL\347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,116 +0,0 @@ -| | | -| ------------------------------------------------------------ | ------------------------------------------------------------ | -| [10](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | create database lianxi charset utf8; | -| [11](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | use lianxi; | -| [12](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | drop table stuinfo; | -| [13](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | drop table stuExam; | -| [14](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | create table stuinfo( | -| [15](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | stuNO varchar(10) primary key, | -| [16](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | stuName varchar(10), | -| [17](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | stuSex char, | -| [18](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | stuage int(3), | -| [19](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | stuAddress varchar(5), | -| [20](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | stuSeat int(2) | -| [21](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | ); | -| [22](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | create table stuExam( | -| [23](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | examNO int(2) primary key, | -| [24](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | stuNO varchar(10), | -| [25](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | foreign key(stuNO) references stuinfo(stuNO), | -| [26](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | writtenExam int(3), | -| [27](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | labExam int(3) | -| [28](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | ); | -| [29](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | create table stuMarks( | -| [30](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | examNO int(2), | -| [31](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | foreign key(examNO) references stuExam(examNO), | -| [32](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | stuID varchar(10), | -| [33](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | score int(3) | -| [34](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | ); | -| [35](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | insert into stuinfo VALUES | -| [36](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | ('s2501','张秋利','男',20,'美国硅谷',1), | -| [37](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | ('s2502','李斯文','女',18,'湖北武汉',2), | -| [38](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | ('s2503','马文才','男',18,'湖南长沙',3), | -| [39](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | ('s2504','欧阳俊雄','女',21,'湖北武汉',4), | -| [40](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | ('s2505','梅超风','男',16,'湖北武汉',5), | -| [41](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | ('s2506','陈旋风','男',19,'美国硅谷',6); | -| [42](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | insert into stuExam values | -| [43](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | (1,'s2501',50,70), | -| [44](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | (2,'s2502',60,65), | -| [45](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | (3,'s2503',86,70), | -| [46](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | (4,'s2504',40,80), | -| [47](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | (5,'s2505',70,85), | -| [48](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | (6,'s2506',85,90); | -| [49](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | insert into stuMarks values | -| [50](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | (1,'s2501',88), | -| [51](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | (2,'s2501',92), | -| [52](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | (3,'s2501',53), | -| [53](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | (4,'s2502',60), | -| [54](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | (5,'s2502',99), | -| [55](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | (6,'s2503',82); | -| [56](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | -- 1.查询出年龄比班上平均年龄大的学生的信息 | -| [57](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | select * from stuinfo where stuage>(select avg(stuage) from stuinfo); | -| [58](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | -- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) | -| [59](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | select a.stuNO,stuName,stuSex,score | -| [60](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | from stuinfo a inner join stuMarks c on | -| [61](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | a.stuNO=c.stuID | -| [62](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | where score in (select max(score) from stuMarks group by stuID); | -| [63](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | -- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) | -| [64](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | select a.stuNO,a.stuName,a.stuSex,(writtenExam+labExam)/2 | -| [65](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | from stuinfo a left join stuExam b ON | -| [66](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | a.stuNO=b.stuNO | -| [67](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | where (writtenExam+labExam)/2 in (select (writtenExam+labExam)/2 from stuExam group by examNO); | -| [68](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | -- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) | -| [69](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | select * from stuinfo where stuSex='男' and stuage>=20; | -| [70](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | | -| [71](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | select * from stuinfo | -| [72](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | where stuSex in (select stuSex from stuinfo where stuSex='男') | -| [73](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | and | -| [74](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | stuage in (select stuage from stuinfo where stuage>=20); | -| [75](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | -- 5.查询出年龄比所有男生年龄都大的女生的信息 | -| [76](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | select * from stuinfo where stuage in (select max(stuage) from stuinfo where stuSex='女' group by stuSex); | -| [77](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | -- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) | -| [78](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | select * from stuinfo a inner join stuExam b on | -| [79](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | a.stuNO=b.stuNO | -| [80](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | where b.writtenExam in (select b.writtenExam from stuExam where b.writtenExam>=60) | -| [81](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | AND | -| [82](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | b.labExam in (select b.labExam from stuExam where b.labExam>=60); | -| [83](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | -- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) | -| [84](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | select a.* from stuinfo a inner join stuExam b inner join stuMarks c ON | -| [85](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | a.stuNO=b.stuNO and b.examNO=c.examNO | -| [86](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | where a.stuNO in (select stuID from stuMarks group by stuID); | -| [87](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | -- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) | -| [88](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | select a.* from stuinfo a inner join stuExam b inner join stuMarks c ON | -| [89](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | a.stuNO=b.stuNO and b.examNO=c.examNO | -| [90](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | where a.stuNO not in (select stuID from stuMarks group by stuID); | -| [91](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | -- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) | -| [92](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | select a.* from stuinfo a inner join stuMarks b on | -| [93](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | a.stuNO=b.stuID | -| [94](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | where score in (select score from stuMarks where score>=90 group by stuID); | -| [95](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | -- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) | -| [96](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | select a.* from stuinfo a inner join stuMarks b on | -| [97](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | a.stuNO=b.stuID | -| [98](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | where score in (select avg(score) from stuMarks group by stuID) group by 'avg(score)'; | -| [99](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | -- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) | -| [100](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | select a.* from stuinfo a inner join stuMarks b on | -| [101](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | a.stuNO=b.stuID | -| [102](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#null) | where | -| [103](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#6ea650355eba70d14982cfa0f40422b57ee1170c_103_103) | (select sum(score) from stuMarks where stuID='s2501') in | -| [104](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#6ea650355eba70d14982cfa0f40422b57ee1170c_104_104) | (select sum(score) from stuMarks where stuID!='s2501' group by stuID); | -| [105](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#6ea650355eba70d14982cfa0f40422b57ee1170c_105_105) | -- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) | -| | select a.* from stuinfo a inner join stuMarks b on | -| | a.stuNO=b.stuID | -| | where score in (select score from stuMarks where score in | -| | (select min(score) from stuMarks where stuID='s2501') < | -| | (select score from stuMarks where stuID!='s2501' group by score) | -| | ); | -| [106](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#6ea650355eba70d14982cfa0f40422b57ee1170c_112_106) | select distinct a.* from stuinfo a right join stumarks b on a.stuno=b.stuID | -| [107](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#6ea650355eba70d14982cfa0f40422b57ee1170c_112_107) | where score > any | -| [108](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#6ea650355eba70d14982cfa0f40422b57ee1170c_112_108) | (select score from stuinfo a right join stumarks b on a.stuno=b.stuID where stuname='张秋利') and stuno != 's2501'; | -| [109](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#6ea650355eba70d14982cfa0f40422b57ee1170c_112_109) | -- 13.查询班上比所有男生年龄都要大的女生的信息 | -| [110](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#6ea650355eba70d14982cfa0f40422b57ee1170c_113_110) | select * from stuinfo where stuage in (select max(stuage) from stuinfo where stuSex='女' group by stuSex); | -| | -- 14.查询出只要比某个男生年龄大的女生的信息 | -| [111](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#6ea650355eba70d14982cfa0f40422b57ee1170c_115_111) | -- 14.查询出只要比某个男生年龄大的女生的信息 | -| [112](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#6ea650355eba70d14982cfa0f40422b57ee1170c_115_112) | select * from stuinfo | -| [113](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#6ea650355eba70d14982cfa0f40422b57ee1170c_115_113) | where stuage > any | -| [114](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#6ea650355eba70d14982cfa0f40422b57ee1170c_115_114) | (select stuage from stuinfo where stuSex='男') and stuSex='女'; | -| [115](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#6ea650355eba70d14982cfa0f40422b57ee1170c_115_115) | | -| [116](https://gitee.com/cao-zhengbo/mysql-base/commit/429e888e89c3b200bb05e4ddd01a03b2da756da0#6ea650355eba70d14982cfa0f40422b57ee1170c_115_116) | | \ No newline at end of file diff --git "a/13 \350\224\241\345\230\211\344\271\220/2\346\234\21021\346\227\245\344\275\234\344\270\232.md" "b/13 \350\224\241\345\230\211\344\271\220/2\346\234\21021\346\227\245\344\275\234\344\270\232.md" deleted file mode 100644 index c4654912f7c9d3eab0307d093da8d6bbb31d635e..0000000000000000000000000000000000000000 --- "a/13 \350\224\241\345\230\211\344\271\220/2\346\234\21021\346\227\245\344\275\234\344\270\232.md" +++ /dev/null @@ -1,543 +0,0 @@ -## 2月21日笔记 - -、主键约束 - -(1)关键字是primary key - -(2)特点 - -A:每一个表只能有一个主键约束 - -B:主键约束的字段值是不允许为null,也不允许重复的 - - - -```sql -CREATE TABLE teacher( - tid INT PRIMARY KEY, - tname VARCHAR(20) -); -``` - -```sql -/* -如果希望某个字段的值,是唯一的,但不要求非空,它也不是主键。 -就可以给这样的字段加唯一键约束 - -2、唯一键约束: -(1)关键字:unique key -(2)特点 -A:允许为null,但是不能重复 -B:一个表可以有多个唯一键约束 -*/ -CREATE TABLE student( - sid INT PRIMARY KEY, - sname VARCHAR(20), - birthday DATE, - score INT, - gender ENUM('男','女'), - weight DOUBLE(4,1), - tel CHAR(11) UNIQUE KEY -); -INSERT INTO student(sid,sname,tel) VALUES -(1,'张三',NULL), -(2,'李四','10086'); - -INSERT INTO student(sid,sname,tel) VALUES -(3,'王五','10086'); - -#建表后增加唯一键约束 -ALTER TABLE 表名称 ADD UNIQUE KEY (字段列表); - -ALTER TABLE student ADD UNIQUE KEY(sname); - -DESC student; - - -#如果要用语句删除唯一键约束 -/* -mysql中,会给主键约束,唯一键约束,外键约束,自动创建索引。 -在底层会单独的索引表,来记录每一个索引值对应的数据地址。 -好比 书的目录页,单独有几页来存储 标题和页面, -哪个标题和对应的页面就像是索引表的意思。 -索引的作用是提高查询的效率。 -像唯一键约束,主键约束等,它们都是表中“关键“信息,可以通过它们快速的定位到某个记录。 -而且实际中根据“关键”信息查询记录的情况更多。 -例如:在一个大的学生信息管理系统中,查询自己的数据,那么根据“学号”或“身份证号”,“姓名”。 -*/ -ALTER TABLE 表名称 DROP INDEX 索引名; - - - - -/* -如果某个字段,不要求唯一,但是要求非空。那么就可以给字段加非空约束。 -3、非空约束 -*/ - -CREATE TABLE student( - sid INT PRIMARY KEY, - sname VARCHAR(20), - birthday DATE, - score INT NOT NULL, - gender ENUM('男','女'), - weight DOUBLE(4,1), - tel CHAR(11) UNIQUE KEY -); -INSERT INTO student(sid,sname,tel) VALUES -(3,'王五','10086'); -/* -错误代码: 1364 -Field 'score' doesn't have a default value*/ - -INSERT INTO student(sid,sname,score,tel) VALUES -(3,'王五',89,'10086'); - - -/* -4、默认值约束 -如果某个字段,在添加数据时未指定值时,希望不要用NULL处理,而是按照一个默认值处理, -就可以使用默认值约束。 -例如:学生性别,在未指定时,默认按照 男 处理 -*/ -CREATE TABLE student( - sid INT PRIMARY KEY, #主键约束 - sname VARCHAR(20) UNIQUE KEY, #唯一键约束 - birthday DATE, - score INT NOT NULL, #非空约束 - gender ENUM('男','女') NOT NULL DEFAULT '男', #非空 + 默认值约束 - weight DOUBLE(4,1), - tel CHAR(11) UNIQUE KEY #唯一键约束 -); -INSERT INTO student(sid,sname,score,tel) - VALUES(1,'张三',89,'10086'); - - INSERT INTO student(sid,sname,score,gender,tel) - VALUES(2,'小翠',89,'女','10010'); - - - #删除score的非空约束 - ALTER TABLE student MODIFY score INT; - - #增加非空约束 - ALTER TABLE student MODIFY score INT NOT NULL; - - #删除gender的默认值约束,保留非空约束 - ALTER TABLE student MODIFY gender ENUM('男','女') NOT NULL; - - #删除gender的非空约束,保留默认值约束 - ALTER TABLE student MODIFY gender ENUM('男','女') DEFAULT '男'; - - #保留非空和默认值约束 - - ALTER TABLE student MODIFY gender ENUM('男','女') DEFAULT '男' NOT NULL; - - -/* -查看一个表的约束名等信息,查看系统库“information_schema”的“table_constraints” -*/ -SELECT * FROM information_schema.table_constraints WHERE table_name = '表名称'; - -SELECT * FROM information_schema.table_constraints WHERE table_name= 'student'; - -/* - -5、检查约束 (MySQL5.7不支持CHECK约束,在MySQL8.0中开始支持CHECK约束) -*/ - -CREATE TABLE student( - sid INT PRIMARY KEY, #主键约束 - sname VARCHAR(20) , - age INT CHECK (age>=18 && age<=35) -); -INSERT INTO student VALUES(1,'张三',25); -INSERT INTO student VALUES(2,'李四',45); -/* -Check constraint 'student_chk_1' is violated(侵犯,无效). -违反了检查约束*/ - -/* -6、外键约束 -约束两个表的关系,或者是一个表的两个字段之间的关系。 - -(1)主表(父表)和从表(子表) -主表:被依赖,被参考 -从表:依赖别人的,参考别人的 - -例如:员工表和部门表 -员工表中有一个部门编号字段,它的值是依赖于部门表的部门编号。 -员工表是从表。 -部门表示主表。 - -例如:学生表、课程表和选课表 -选课表中的学号,它的值是依赖于学生表的学号。 -选课表是从表, -学生表是主表。 -选课表中的课程编号,它的值是依赖于课程表的课程编号。 -选课表是从表, -课程表示主表。 - -选课表有两个外键。 - -例如:订单表,用户表 -订单表中有一个字段(用户名),它的值依赖于用户表。 -订单表就是从表, -用户表就是主表。 - -例如:订单明细表和订单表。 -订单明细表中的订单编号,它的值是依赖于订单表的订单编号。 -订单表就是主表, -订单明细表就是从表。 - -(2)外键的建立和指定要在从表中定义 -(3)关键字 foreign key -(4)格式 foreign key (从表的字段) references 主表(被依赖字段) -(5)要求 -A:主表必须先存在 -B:主表被依赖字段必须有索引,所以通常是主键列或唯一键列等才能作为被依赖字段。 -C:删除表时,要么先删除从表,再删除主表,要么先解除外键约束,然后各自删除。 -D:从(子)表的依赖字段的数据,必须在主(父)表被依赖字段中选择。 - 添加和修改都是这样的。 -E:主(父)表被依赖字段的数据不能轻易的删除和修改,要看是否被引用 -``` - -```sql -#删除表 -DROP TABLE dept; #失败 - -INSERT INTO emp VALUES(1,'张三',1); -/* -错误代码: 1452 -Cannot add or update a child row: -a foreign key constraint fails (`0106db`.`emp`, CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`deptid`) REFERENCES `dept` (`did`))*/ - -INSERT INTO dept VALUES(1,'财务'); -INSERT INTO emp VALUES(1,'张三',1); - - -CREATE TABLE emp( - eid INT, - ename VARCHAR(20), - deptid INT, #这里的部门编号可以和dept表中的部门编号名字不一样,但是数据类型和逻辑意义要一样 - FOREIGN KEY (deptid) REFERENCES dept(did) ON UPDATE CASCADE ON DELETE SET NULL # 更新时级联操作,删除时设置为null -); - - -/* -7、自增属性 -维护某个字段的值自动增长的一个属性。 -它的要求: -(1)一个表最多只能有一个字段是自增的 -(2)自增的字段必须是整数类型 -(3)自增的字段必须是键约束的字段(通常是主键、唯一键) - -自增字段赋值为null和0的时候,会自增, -如果赋值为其他的值,按照你指定的值来。 -*/ -CREATE DATABASE mxdx; -USE mxdx; - -CREATE TABLE stu( - sid INT AUTO_INCREMENT PRIMARY KEY, - sname VARCHAR(20) -); -/* -错误代码: 1075 -Incorrect table definition; -there can be only one auto column(只能是一个自动列) - and(并且) it must be defined as a key(必须是键列) -*/ - - -INSERT INTO stu VALUES(NULL,'张三'); -INSERT INTO stu VALUES(NULL,'李四'); -INSERT INTO stu VALUES(0,'王五'); -INSERT INTO stu VALUES(-1,'赵六'); -INSERT INTO stu VALUES(8,'王八'); -INSERT INTO stu VALUES(NULL,'小九'); - -ALTER TABLE 表名称 AUTO_INCREMENT = 起始值; -ALTER TABLE stu AUTO_INCREMENT = 1001; - -INSERT INTO stu VALUES(NULL,'小十'); -INSERT INTO stu VALUES(NULL,'小十1'); - -SHOW CREATE TABLE stu; - -``` - - - -#### 作业 - -```sql --- 1、创建数据库 test01_company -CREATE DATABASE test01_company; -DESC test01_company; -use test01_company; - --- 2、创建表格 offices -CREATE TABLE offices( -officecode int, -city VARCHAR(30), -address VARCHAR(50), -country VARCHAR(50), -postalcode VARCHAR(25) -); --- --- | 字段名 | 数据类型 | --- | ---------- | ----------- | --- | officeCode | int | --- | city | varchar(30) | --- | address | varchar(50) | --- | country | varchar(50) | --- | postalCode | varchar(25) | --- --- 3、创建表格 employees -CREATE TABLE employees( -empnum int(11), -lastname VARCHAR(50), -firstname VARCHAR(50), -mobile VARCHAR(25), -code int , -jobtitle VARCHAR(50), -brith date , - note VARCHAR(255), - sex VARCHAR(5) -); - --- --- | 字段名 | 数据类型 | --- | --------- | ------------- | --- | empNum | int(11) | --- | lastName | varchar(50) | --- | firstName | varchar(50) | --- | mobile | varchar(25) | --- | code | int | --- | jobTitle | varchar(50) | --- | birth | date | --- | Note | varchar(255) | --- | Sex | varchar(5) | --- --- **要求4:**将表employees的mobile字段修改到code字段后面。 -ALTER TABLE employees MODIFY mobile VARCHAR(50) AFTER `code`; --- **要求5:**将表employees的birth字段改名为birthday; -alter TABLE employees CHANGE brith birthday date ; --- **要求6:**修改sex字段,数据类型为char(1)。 -alter TABLE employees MODIFY sex CHAR(1); --- **要求7:**删除字段note; - ALTER TABLE employees DROP note; - --- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); - alter table employees add favoriate_activity VARCHAR(100); --- **要求9:**将表employees的名称修改为 employees_info -alter table employees RENAME to employees_info; -``` - -```sql --- 1、创建数据库 test02db -create database test02db; -use test02db; - --- 2、创建表格pet -create table pet( -name VARCHAR(20), -owner VARCHAR(20), -specise VARCHAR(20), -sex char(1), -birth year , -death year -); --- | 字段名 | 字段说明 | 数据类型 | --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | --- --- 3、添加记录 -insert into pet values -('Fluffy','harold','Cat','f',2003,2010), -('Claws','gwen','Cat','m',2004,null), -('Buffy',null,'Dog','f',2009,null), -('Fang','benny','Dog','m',2000,null), -('bowser','diane','Dog','m',2003,2009), -('Chirpy',null,'Bird','f',2008,null); --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | --- --- 4、 添加字段主人的生日owner_birth。 --- ALTER TABLE pet add owner_birth ; --- 5、 将名称为Claws的猫的主人改为kevin --- ALTER table pet change Claws kevin; - --- 6、 将没有死的狗的主人改为duck -update pet set owner='duck' where death is null; --- 7、 查询没有主人的宠物的名字; -select owner pet WHERE owner is null; --- 8、 查询已经死了的cat的姓名,主人,以及去世时间; -select name,owner,death from pet WHERE species='Cat'; --- 9、 删除已经死亡的狗 -delete from pet where species='Dog' and death='2009'; --- 10、查询所有宠物信息 -select * from pet; -``` - -```sql - --- 1、创建数据库:test03_company create database test03_company; - -use test03_company; - --- ```sql -- create database test03_company charset utf8; - --- ``` - --- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - --- A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - --- ```mysql -- use test03_company ; create table department( depid int primary key auto_increment, depname char(10) not null unique key, deinfo varchar(200) ); - --- ``` - --- B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - --- * 雇员编号为主键; -- * 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); - --- * 性别默认为男; - --- ```mysql ALTER DATABASE test03_company CHARACTER SET utf8; create table employee ( empid int primary key auto_increment, name varchar(10) not null, sex enum('男','女') not null default'男', title varchar(10), birthday date, depid int, foreign key(depid) references department(depid) - -); - --- - --- C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - --- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) create table salary( empid int primary key, basesalary double, titlesalary double, deduction double, foreign key(empid) references employee(empid) - -); - --- 4、添加数据如下: - --- 部门表: desc department; show create table department; alter table department convert to character set utf8; insert into department values (111,'生产部',null), (222,'销售部',null), - -(333,'人事部','人力资源管理'); - --- 部门编号 部门名称 部门简介 --- 111 生产部 Null --- 222 销售部 Null --- 333 人事部 人力资源管理 --- --- 雇员表: -insert into employee values -(1001,'张三','男','高级工程师','1975-1-1',111), -(1002,'李四','女','助师','1985-1-1',111), -(1003,'王五','男','工程师','1978-11-11',222), -(1004,'张六','男','工程师','1999-1-1',222); --- --- 雇员编号 姓名 性别 --- -------- ---- ---- --- 1001 张三 男 --- 1002 李四 女 --- 1003 王五 男 --- 1004 张六 男 --- --- 工资表: -insert into salary values -(1001,2200,1100,200), -(1002,1200,200,null), -(1003,2900,700,200), -(1004,1950,700,150); --- --- 雇员编号 基本工资 职务工资 --- -------- -------- -------- --- 1001 2200 1100 --- 1002 1200 200 --- 1003 2900 700 --- 1004 1950 700 --- -``` - -```sql --- 1、创建一个数据库:test04_school create database test04_school; - -use test04_school; - --- 2、创建如下表格 create table Department( DepNo int(10) primary key not null unique, DepName varchar(20) not null, DepNote varchar(50) - -); - --- 表1 Department表的定义 - --- 字段名 字段描述 数据类型 主键 外键 非空 唯一 --- DepNo 部门号 int(10) 是 否 是 是 --- DepName 部门名称 varchar(20) 否 否 是 否 --- DepNote 部门备注 Varchar(50) 否 否 否 否 --- --- 表2 Teacher表的定义 -create table Teacher( -Number int primary key not null unique, -Name varchar(30) not null, -Sex VARCHAR(4), -Birth date, -DepNo int, -Salary float, -Address VARCHAR(100), -foreign key(DepNo) references Department(DepNo) -); --- --- 字段名 字段描述 数据类型 主键 外键 非空 唯一 --- ---------- ------------ ------------ -------- -------- -------- -------- --- Number 教工号 int 是 否 是 是 --- Name 姓名 varchar(30) 否 否 是 否 --- Sex 性别 varchar(4) 否 否 否 否 --- Birth 出生日期 date 否 否 否 否 --- DepNo 部门号 int 否 是 否 否 --- Salary 工资 float 否 否 否 否 --- Address 家庭住址 varchar(100) 否 否 否 否 --- --- 3、添加记录 -alter table Department convert to character set utf8; -insert into Department VALUES -(601,'软件技术系','软件技术等专业'), -(602,'网络技术系','多媒体技术等专业'), -(603,'艺术设计系','广告艺术设计等专业'), -(604,'管理工程系','连锁经营管理等专业'); --- --- DepNo DepName DepNote --- --------- ----------- ------------------ --- 601 软件技术系 软件技术等专业 --- 602 网络技术系 多媒体技术等专业 --- 603 艺术设计系 广告艺术设计等专业 --- 604 管理工程系 连锁经营管理等专业 -alter table Teacher convert to character set utf8; -insert into Teacher VALUES -(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'), -(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'), -(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'), -(2004,'James','女','1980-10-20',602,3500,'四川省成都市'), -(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); --- --- Number Name Sex Birth DepNo Salary Address --- ---------- -------- ------- ---------- --------- ---------- ------------ --- 2001 Tom 女 1970-01-10 602 4500 四川省绵阳市 --- 2002 Lucy 男 1983-12-18 601 2500 北京市昌平区 --- 2003 Mike 男 1990-06-01 604 1500 重庆市渝中区 --- 2004 James 女 1980-10-20 602 3500 四川省成都市 --- 2005 Jack 男 1975-05-30 603 1200 重庆市南岸区 --- --- 4、用SELECT语句查询Teacher表的所有记录。 -select * from Teacher; --- -``` - diff --git "a/13 \350\224\241\345\230\211\344\271\220/MySQL \347\254\224\350\256\260 1.md" "b/13 \350\224\241\345\230\211\344\271\220/MySQL \347\254\224\350\256\260 1.md" deleted file mode 100644 index ddcc504e6e7481fc4a927c655b4c1efd65d95dbd..0000000000000000000000000000000000000000 --- "a/13 \350\224\241\345\230\211\344\271\220/MySQL \347\254\224\350\256\260 1.md" +++ /dev/null @@ -1,306 +0,0 @@ -## MySQL 笔记 1 - -- 数据库是什么? - - - 存储数据的地方 - - DB:数据库(Database) - - -- 为什么要用数据库? - - 因为应用程序产生的数据是在内存中的,如果程序退出或者是断电了,则数据就会消失。使用数据库是为了能够永久保存数据。当然这里指的是非内存数据库。 - -数据库分类 - -- 早期:层次模型、网状模型、关系模型, - -SQL是什么? - -- SQL是结构化查询语言(Structure Query Language),专门用来操作/访问数据库的通用语言。 - -MySQL图片理解 - -![](C:\Users\ASUS\Desktop\image-20230212010043006.png) - - - -# SQL的分类 - -| 名称 | 解释 | 命令 | -| :----------------------: | :-------------------------------------------: | :----------------------------------------------------------: | -| DDL (数据定义语言) 20% | 定义和管理数据对象结构,如数据库,数据表等 | 创建(create),修改(alter),删除(drop) show(展示)结构 | -| DML (数据操作语言) 30% | 用于操作数据库对象中所包含的数据 | 增加(insert),修改(update),删除(delete), 数据 | -| DQL (数据查询语言) 50% | 用于查询数据库数据 | 查(select) | -| DCL (数据控制语 言) | 用于管理数据库的语言,包括管理权限及数 据更改 | grant(授权),commit(确认),rollback(回滚) | - -## SQL语法规范 - -(1)mysql的sql语法不区分大小写 - -- A:数据库的表中的数据是否区分大小写。这个的话要看表格的字段的数据类型、编码方式以及校对规则 。排序 - -​ ci(大小写不敏感),cs(大小写敏感),_bin(二进制,即比较是基于字符编码的值而与language无关,区分大小写) - -- B:sql中的关键字,比如:create,insert等,不区分大小写。但是大家习惯上把关键字都“大写”。 - - -(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 - -(3)建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) - -(4)数据库和表名、字段名等对象名中间不要包含空格 - - - -## sql 如何注释 - -SQL脚本中如何加注释 - -- 单行注释:#注释内容(mysql特有的) - -- 单行注释:--空格注释内容 其中--后面的空格必须有 - -- 多行注释:/* 注释内容 */ - - - -```sql -create table tt( - id int, #编号 - `name` varchar(20), -- 姓名 - gender enum('男','女') - /*··· - 性别只能从男或女中选择一个, - 不能两个都选,或者选择男和女之外的 - */ -); -``` - - - -### 作业 - -第一题 - -```sql --- 1、创建数据库test01_market -CREATE DATABASE test01_market --- 2、创建表格customers -use test01_market; - CREATE TABLE customers( - c_num int(11), - c_name varchar(50), - c_contact varchar(50), - c_city varchar(50), - c_birth date - ); - --- | 字段名 | 数据类型 | --- | --------- | ----------- | --- | c_num | int(11) | --- | c_name | varchar(50) | --- | c_contact | varchar(50) | --- | c_city | varchar(50) | --- | c_birth | date | --- --- **要求3:**将c_contact字段移动到c_birth字段后面 - ALTER TABLE customers MODIFY c_contact varchar(50) AFTER c_birth --- **要求4:**将c_name字段数据类型改为 varchar(70) - ALTER TABLE customers MODIFY c_name varchar(70) --- **要求5:**将c_contact字段改名为c_phone -ALTER TABLE customers CHANGE c_contact c_phone varchar(50) --- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -ALTER TABLE customers ADD c_gender char(1) after c_name --- **要求7:**将表名改为customers_info - ALTER TABLE customers RENAME to customers_info --- **要求8:**删除字段c_city -alter table drop c_city -desc customers_info -``` - -第二题 - -```sql --- 1、创建数据库test02_library --- CREATE DATABASE test02_library --- 2、创建表格books --- use test02_library -create table books( -b_id int(11), -b_name varchar(50), -authors varchar(100), -price float, -pubdate year, -note varchar(100), -num int(11) -); --- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | --- | ------- | -------- | ------------- | -------- | ---- | --- | b_id | 书编号 | int(11) | 否 | 是 | --- | b_name | 书名 | varchar(50) | 否 | 否 | --- | authors | 作者 | varchar(100) | 否 | 否 | --- | price | 价格 | float | 否 | 否 | --- | pubdate | 出版日期 | year | 否 | 否 | --- | note | 说明 | varchar(100) | 是 | 否 | --- | num | 库存 | int(11) | 否 | 否 | --- --- 3、向books表中插入记录 --- --- 1) 指定所有字段名称插入第一条记录 --- INSERT INTO books (b_id,b_name,authors,price,pubdate,note,num) VALUES(1,`Tal of AAA`,`Dickes`,23,`1995`,`novel`,11); --- 2)不指定字段名称插入第二记录 --- INSERT INTO books VALUES(2,`EmmaT`,`Jane lura`,35,`1993``joke`,22); --- 3)同时插入多条记录(剩下的所有记录) --- INSERT INTO books VALUES -(3,`Story of Jane`,`Jane Tim`,40,`2001`,`novel`,0), -(4,`Lovey Day`,`George Byron`,20,`2005`,`novel`,30), -(5,`Old land`,`Honore Blade`,30,,`2010`,`law`,0) -(6,`The Battle`,`Upton Sara`,30,`1999`,`medicine`,40), -(7,`Rose Hood`,`Richard haggard`,28,`2008`,`cartoon`28); --- | b_id | b_name | authors | price | pubdate | note | num | --- | ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | --- | 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | --- | 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | --- | 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | --- | 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | --- | 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | --- | 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | --- | 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | --- --- 4、将小说类型(novel)的书的价格都增加5。 --- UPDATE books SET prich = prich+5 WHERE note='novel'; --- 5、将名称为EmmaT的书的价格改为40。 --- UPDATE books SET price = 40 WHERE b_name='EmmaT'; --- 6、删除库存为0的记录 -DELETE FROM books WHERE num=0; -``` - - - -第三题 - -```sql --- 1、创建数据库test03_bookstore -CREATE DATABASE test03_bookstore --- 2、创建book表 -USE test03_bookstore -CREATE TABLE book ( -id int(11), -title VARCHAR(100), -author varchar(100), -price double(11,2), -sales int(11), -stock int(11), -img_path varchar(100) -); --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | sales | int(11) | NO | | NULL | | --- | stock | int(11) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----+-------------+------------+-------+-------+-------+----------------------------+ --- | id | title | author | price | sales | stock | img_path | --- +----+-------------+------------+-------+-------+-------+-----------------------------+ --- | 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | --- | 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | --- +----+---------------+------------+-------+-------+-------+----------------------------+ --- ``` --- --- 3、创建用户表users,并插入数据 - CREATE TABLE users( -id int(11), -username varchar(100), -password varchar(100), -email varchar(100) -); --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | username | varchar(100) | NO | UNI | NULL | | --- | password | varchar(100) | NO | | NULL | | --- | email | varchar(100) | YES | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----+----------+----------------------------------+--------------------+ --- | id | username | password | email | --- +----+----------+----------------------------------+--------------------+ --- | 1 | admin | 112233 | admin@mxdx.com | --- +----+----------+----------------------------------+--------------------+ --- ``` --- --- 4、创建订单表orders --- CREATE TABLE orders ( -id varchar(100), -order_time datetime -total_count int(11), -total_amount double(11,2), -state int(11), -user_id int(11) -); --- ```mysql --- +--------------+--------------+------+-----+---------+-------+ --- | Field | Type | Null | Key | Default | Extra | --- +--------------+--------------+------+-----+---------+-------+ --- | id | varchar(100) | NO | PRI | NULL | | --- | order_time | datetime | NO | | NULL | | --- | total_count | int(11) | NO | | NULL | | --- | total_amount | double(11,2) | NO | | NULL | | --- | state | int(11) | NO | | NULL | | --- | user_id | int(11) | NO | MUL | NULL | | --- +--------------+--------------+------+-----+---------+-------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | id | order_time | total_count | total_amount | state | user_id | --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | --- +----------------+---------------------+-------------+--------------+-------+---------+ --- ``` --- --- 5、创建订单明细表order_items --- CREATE TABLE order_items ( -id int(11), -count int(11), -amount double(11,2), -title varchar(100), -author varchar(100), -price double(11,2), -img_path varchar(100), -order_id varchar(100) -); --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | count | int(11) | NO | | NULL | | --- | amount | double(11,2) | NO | | NULL | | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- | order_id | varchar(100) | NO | MUL | NULL | | --- +----------+--------------+------+-----+---------+----------------+ - -``` - diff --git "a/13 \350\224\241\345\230\211\344\271\220/\345\207\275\346\225\260 \345\205\263\350\201\224\346\237\245\350\257\242.md" "b/13 \350\224\241\345\230\211\344\271\220/\345\207\275\346\225\260 \345\205\263\350\201\224\346\237\245\350\257\242.md" deleted file mode 100644 index 143e11492ccbbc8188cea5bb9b0e80b43e69d4e9..0000000000000000000000000000000000000000 --- "a/13 \350\224\241\345\230\211\344\271\220/\345\207\275\346\225\260 \345\205\263\350\201\224\346\237\245\350\257\242.md" +++ /dev/null @@ -1,313 +0,0 @@ -### 笔记 - -、分组函数 - -AVG(x) :求平均值 - -SUM(x):求总和 - -MAX(x):求最大值 - -MIN(x):求最小值 - -COUNT(x):统计记录数 - - - -\#查询全公司员工的实发工资的平均值 - -\#实发工资 = salary * (1 + 奖金比例) - -\#select avg(实发工资) FROM t_employee; - -count(*)是对满足条件的(如果没有where条件,就是对所有记录)记录累加数量 - -count(常量值)等价于count(*) - -count(字段名/表达式) 只统计非NULL值的记录数 - -四、单行函数 - -1、数学函数 -CEIL(2.4) 向上取整 -FLOOR(2.4) 向取整 -ROUND(M,N) 保留M的N位小数,小数位超过N会四舍五入 -TRUNCATE(M,N) 保留M的N位小数,小数位超过N ,直接截断 不四舍五入 -*/ - -#查询全公司的平均薪资,显示小数点后2位 - - -/* -2、字符串函数 -CONCAT(x,y,z) 拼接xyz -CONCAT_WS(a,x,y,z) ,用a来拼接xyz -*/ -SELECT 'hello' + 'world'; #+不是拼接 -SELECT CONCAT('hello','world','java'); -SELECT CONCAT('hello','world','java'),CONCAT_WS('-','hello','world','java'); - -#length求字节个数/长度 -SELECT LENGTH('hello'); #ASCII表范围的字符,一个字符用1个字节 -SELECT LENGTH('闽西大学'); #mysql8默认编码是UTF8,一个汉字时3个字节 -SELECT CHAR_LENGTH('软件工程'); #求字符个数(长度) - - - -#返回某个字符左边/右边的几个字符 -SELECT LEFT('hello', 3),RIGHT('hello',3); - -#trim系列 -SELECT CONCAT('[', TRIM(' hello world '), ']'); -- 清除空格 -SELECT CONCAT('[', LTRIM(' hello world '), ']'); -SELECT CONCAT('[', RTRIM(' hello world '), ']'); -SELECT CONCAT('[', TRIM(BOTH 'x' FROM 'xxxxhelloxxxxxworldxxxx'), ']'); -- 清除两端x -SELECT CONCAT('[', TRIM(LEADING 'x' FROM 'xxxxhelloxxxxxworldxxxx'), ']'); -SELECT CONCAT('[', TRIM(TRAILING 'x' FROM 'xxxxhelloxxxxxworldxxxx'), ']'); - -#截取字符串 -SELECT SUBSTRING_INDEX('www.mxdx.com', '.', 2); -SELECT SUBSTRING_INDEX('www.mxdx.com', '.', -2); -SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.mxdx.com', '.', 2),'.',-1); - -/* -3、日期时间函数 -CURDATE() 当前日期 -CURTIME() 当前时间 -NOW() 当前日期+时间 -year() 取年 -month() 取月 -day() 取天 -DATEDIFF(date1,date2)/TIMEDIFF(time1,time2) 返回两个时间的间隔 -*/ -SELECT CURDATE(),CURTIME(),NOW(); -SELECT NOW(),UTC_TIME(); - -#查询这个月过生日的员工 - - -#查询40岁(含)以上的员工 - - -#查询员工姓名和员工的生日中的 月和日 -SELECT ename,CONCAT_WS('-',MONTH(birthday),DAY(birthday)) -FROM t_employee; - - -#查看每个员工的入职天数 -#看今天和员工的入职日期的间隔 - -SELECT ename,hiredate, DATEDIFF(CURDATE(),hiredate) -FROM t_employee; - -#查询入职超过5年的员工 -SELECT ename,hiredate,DATEDIFF(CURDATE(),hiredate)/365 -FROM t_employee -WHERE DATEDIFF(CURDATE(),hiredate)>365*5; - -# -SELECT DATE_FORMAT(CURDATE(), '%y-%c-%e'); - -/* -4、加密函数 -*/ -INSERT INTO t_user VALUES('chai',MD5('123456')); -INSERT INTO t_user VALUES('lin',SHA('123456')); -#同一个表不要使用两种加密函数 - -#查询"chai",密码是“123456” -SELECT * FROM t_user WHERE username='chai' AND PASSWORD=MD5('123456'); -#查询"lin",密码是“123456” -SELECT * FROM t_user WHERE username='lin' AND PASSWORD=MD5('123456'); - -第8章 关联查询 -关联查询:两个或更多个表一起查询。 -又称为联合查询,多表查询。 - -1、关联查询的结果一共有7种: -两个表的记录分为四种: -①A表中的记录能在B表中找到对应的记录 -②A表中的记录在B表中找不到对应的记录 -③B表中的记录可以在A表找到对应的记录 -④B表中的记录在A表中找不到对应的记录 - -(1)A∩B ①③ -(2)A ①② -(3)A-A∩B ② -(4)B ③④ -(5)B-A∩B ④ -(6)A∪B ①②③④ -(7)A∪B-A∩B ②④ - -2、两个表要一起查询,要有前提条件:有关联 -就是有相同逻辑意义和数据类型的字段。 - -3、如何实现7种查询结果 -(1)内连接 inner join -(2)外连接 outer join -左外连接 left outer join 或 left join -右外连接 right outer join 或 right join -全外连接 full outer join 或 full join -- union 代替 - -但是,mysql不支持全外连接,没有full join。 -mysql使用union关键字合并其他的查询结果实现全外连接的效果。 - -内连接 ==> A∩B -左连接 ==> A 或 A-A∩B -右连接 ==> B 或 B-A∩B -全外连接 ==> A∪B 或 A∪B - A∩B - 左连接的A union 右连接的B 得到 A∪B - 左连接的A-A∩B union 右连接B-A∩B 得到 A∪B - A∩B - -4、内连接 inner join -A表 inner join B表 on 关联条件 -*/ - -#查询员工表的员工姓名,和部门编号,部门表的部门名称 -#不显示那些 没有分配部门的员工,也不包括那些没有员工的部门 - --- 重名问题的产生 -/* -Column 'did' in field list is ambiguous 有重名问题 -原因:did没有指定是哪个表的, -*/ - --- 笛卡尔积的产生 -/* -上面的sql错误,结果出现了一种现象:笛卡尔积 -原因:无关联条件 -*/ - - - - -/* -5、左连接 left join -(1)A表:A表 left join B表 on A表.关联字段 = B表.关联字段 -(2)A-A∩B: - A表 left join B表 on A表.关联字段 = B表.关联字段 - where 从表.关联字段 is null - 从表是A和B 看占从表位置的表。 -*/ -#查询所有的员工的姓名和部门编号,部门名称,包括那些没有分配部门的员工 - - - -#查询所有的员工的姓名和部门编号,部门名称,只显示那些没有分配部门的员工。 - - - -/* -6、右连接 right join -(1)B表:A表 right join B表 on A表.关联字段 = B表.关联字段 -(2)B-A∩B: - A表 right join B表 on A表.关联字段 = B表.关联字段 - where 从表.关联字段 is null - 从表是A还是B 得看占从表位置的表。 - -思考: - B表 right join A表 on A表.关联字段 = B表.关联字段 结果是A - A表 right join B表 on A表.关联字段 = B表.关联字段 结果是B -*/ -#查询所有部门的编号,部门的名称,以及该部门下所有的员工信息, -#包括那些没有员工的部门 - - - -#查询所有部门的编号,部门的名称,以及该部门下所有的员工信息, -#只显示那些没有员工的部门 - - -/* -主表/父表:部门表是主表 -从表/子表:员工表是从表 - -两个表的关联字段是 did(部门编号) -部门表中是所有部门的信息,是完整的部门信息。 -员工表选择所属部门时,必须参考部门表,选择的部门编号必须在部门表中找得到。 -*/ - - - -/* -7、使用union实现全外连接的效果 -(1)A∪B -转换为 左连接的A union 右连接的B -(2)A∪B - A∩B -转换为 左连接的A-A∩B union 右连接的B-A∩B -*/ -#查询所有员工和所有部门的信息,包括那些没有员工的部门,和没有分配部门的员工 -#当然也包括有员工的部门、和有部门的员工。 - - - -#查询所有员工和所有部门的信息, -#只显示那些没有部门的员工、没有员工的部门。 - - - - -/* -8、特殊的内连接 -*/ -#查询员工和部门的信息,只显示有部门的员工和有员工的部门 - - -/* -9、自连接 -进行关联查询的两个表,本质上是一个表。 - -分析员工表: - 有一个字段是mid,是领导编号,即表示这个员工归谁管。 - 那么这里的领导编号其实就是这个领导他作为员工的员工编号。 - -通过取别名的方式,把一张表虚拟成两张表。 -当然,也要关联字段。 - -*/ -#查询每一个员工的编号,姓名,和他的领导的编号和姓名 - - -/* -10、更多表关联 -n张表关联,关联条件要编写n-1个 -2张表,写1个关联条件 -3张表,写2个关联条件 -.... -*/ - -/* -查询每一个员工的姓名,职位名称,部门名称 -员工的姓名在t_employee表中 -员工的职位名称在t_job表中 -员工的部门名称在t_department表中 - -找关联条件 -(1) t_employee.did = t_department.did -(2) t_employee.job_id = t_job.jid - -A表 inner|left|right join B表 on 关联条件1 - inner|left|right join C表 on 关联条件2 - -*/ - - - -/* -查询员工的姓名,领导的姓名,员工自己职位的名称,领导的职位名称,部门的名称 -分析: - t_employee 当员工表使用 emp - t_employee 当领导表使用 mgr - t_department 部门表 - t_job j1 职位表 - t_job j2 职位表 - -找关联条件 -(1) emp.did = t_department.did -(2) emp.job_id = j2.jid -(3) emp.mid = mgr.eid -(4) mgr.job_id = j1.jid -*/ - -作业 - diff --git "a/13 \350\224\241\345\230\211\344\271\220/\345\255\220\346\237\245\350\257\242 \347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.md" "b/13 \350\224\241\345\230\211\344\271\220/\345\255\220\346\237\245\350\257\242 \347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index 5f173acadd81f4d861885fe5c064cc970daf6469..0000000000000000000000000000000000000000 --- "a/13 \350\224\241\345\230\211\344\271\220/\345\255\220\346\237\245\350\257\242 \347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,116 +0,0 @@ -| ### 笔记 | | | -| -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| | [2](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_2) | | -| | [3](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_3) | ##### 子查询 | -| | [4](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_4) | | -| | [5](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_5) | - 嵌套在其他SQL语句中的查询语句。 | -| | [6](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_6) | - 子查询通常先运行,所以要用()包裹起来。 | -| | [7](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_7) | - 子查询的运行结果,可以作为其他语句的条件,数据源等。 | -| | [8](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_8) | | -| | [9](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_9) | ##### 子查询分三种形式 | -| | [10](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_10) | | -| | [11](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_11) | select 1 from 2 where 3 | -| | [12](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_12) | | -| | [13](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_13) | 1.放在select后面 | -| | [14](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_14) | | -| | [15](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_15) | 2.放在where/having后面 | -| | [16](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_16) | | -| | [17](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_17) | 3.放在from后面,子查询当做一个临时的表使用,必须要给别名。 | -| | [18](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_18) | | -| | [19](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_19) | ##### where或having后的子查询,其子查询的结果有三种形式 | -| | [20](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_20) | | -| | [21](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_21) | 1.单列单个值,可以直接使用比较运算符 | -| | [22](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_22) | | -| | [23](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_23) | 2.单列多个值,可以使用 in ,not in 进行比较 | -| | [24](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_24) | | -| | [25](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_25) | 3.单列多个值,可以使用比较运算符,搭配any,all,等关键字与查询结果进行比较 | -| | [26](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_26) | | -| | [27](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_27) | ##### 子查询结果是单列,可以放在select参与运算,或者是作为字段,也可以放在where / having后当条件。 | -| | [28](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_28) | | -| | [29](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_29) | ##### 子查询结果是多列,多个值,只能放在from后面当临时表使用,并且必须取别名。 | -| | [30](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_30) | | -| | [31](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_31) | ### 作业 | -| | [32](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_32) | | -| | [33](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_33) | ~~~ mysql | -| | [34](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_34) | create database text1; | -| | [35](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_35) | use text1; | -| | [36](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_36) | alter database text1 charset utf8; | -| | [37](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_37) | alter table stuinfo charset utf8; | -| | [38](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_38) | alter table stuExam charset utf8; | -| | [39](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_39) | alter table stuMarks charset utf8; | -| | [40](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_40) | | -| | [41](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_41) | create table stuinfo( | -| | [42](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_42) | stuNO varchar(10) primary key, | -| | [43](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_43) | stuName varchar(10), | -| | [44](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_44) | stuSex varchar(5), | -| | [45](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_45) | stuAge double, | -| | [46](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_46) | stuAddress varchar(20), | -| | [47](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_47) | stuSeat int auto_increment unique | -| | [48](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_48) | ); | -| | [49](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_49) | create table stuExam( | -| | [50](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_50) | examNo int primary key, | -| | [51](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_51) | stuNO varchar(10), | -| | [52](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_52) | writtenExam varchar(10), | -| | [53](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_53) | labExam double, | -| | [54](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_54) | foreign key(stuNo) references stuinfo(stuNo) | -| | [55](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_55) | ); | -| | [56](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_56) | create table stuMarks( | -| | [57](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_57) | examNO int, | -| | [58](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_58) | stuID varchar(10), | -| | [59](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_59) | score double, | -| | [60](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_60) | foreign key(examNO) references stuExam(examNO) | -| | [61](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_61) | ); | -| | [62](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_62) | insert into stuinfo values | -| | [63](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_63) | ('s2501','张秋利','男',20,'美国硅谷',1), | -| | [64](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_64) | ('s2502','李斯文','女',18,'湖北武汉',2), | -| | [65](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_65) | ('s2503','马文才','男',18,'湖南长沙',3), | -| | [66](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_66) | ('s2504','欧阳俊雄','女',21,'湖北武汉',4), | -| | [67](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_67) | ('s2505','梅超风','男',16,'湖北武汉',5), | -| | [68](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_68) | ('s2506','陈旋风','男',19,'美国硅谷',6); | -| | [69](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_69) | insert into stuExam values | -| | [70](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_70) | (1,'s2501','50',70), | -| | [71](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_71) | (2,'s2502','60',65), | -| | [72](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_72) | (3,'s2503','86',70), | -| | [73](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_73) | (4,'s2504','40',80), | -| | [74](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_74) | (5,'s2505','70',85), | -| | [75](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_75) | (6,'s2506','85',90); | -| | [76](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_76) | insert into stuMarks values | -| | [77](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_77) | (1,'s2501',88), | -| | [78](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_78) | (2,'s2501',92), | -| | [79](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_79) | (3,'s2501',53), | -| | [80](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_80) | (4,'s2502',60), | -| | [81](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_81) | (5,'s2502',99), | -| | [82](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_82) | (6,'s2503',82); | -| | [83](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_83) | -- 1.查询出年龄比班上平均年龄大的学生的信息 | -| | [84](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_84) | select * from stuinfo where stuAge>(select round(avg(stuAge),2) from stuinfo); | -| | [85](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_85) | -- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) | -| | [86](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_86) | select t.stuNO,t.stuName,t.stuAge,max(score) from stumarks s left join stuinfo t on s.stuID=t.stuNO group by s.stuID; | -| | [87](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_87) | -- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) | -| | [88](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_88) | select avg(writtenExam+labExam) from stuexam right join stuinfo on stuexam.stuNO=stuinfo.stuNO GROUP BY stuexam.stuNO; | -| | [89](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_89) | -- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) | -| | [90](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_90) | -- 普通查询 | -| | [91](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_91) | select * from stuinfo where stusex='男' and stuage>=20; | -| | [92](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_92) | -- 子查询 | -| | [93](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_93) | select * from stuinfo where stuage=(select stuage from stuinfo where stusex='男' and stuage>=20); | -| | [94](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_94) | -- 5.查询出年龄比所有男生年龄都大的女生的信息 | -| | [95](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_95) | select stuSex,max(stuAge) from stuinfo where stuSex='女' and stuAge> all(select stuAge from stuinfo where stuSex ='男'); | -| | [96](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_96) | -- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) | -| | [97](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_97) | select t.stuNO,t.stuName,t.stuAge,max(score) from stumarks s left join stuinfo t on s.stuID=t.stuNO group by s.stuID; | -| | [98](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_98) | -- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) | -| | [99](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_99) | select * from stuinfo a left join stumarks c on a.stuNO=c.stuID where stuID is NULL; | -| | [100](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_100) | -- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) | -| | [101](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_101) | select * from stuinfo a left join stumarks c on a.stuNO=c.stuID where a.stuNO not in (select stuID from stumarks group by stuID); | -| | [102](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_102) | -- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) | -| | [103](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_103) | select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where score>90; | -| | [104](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_104) | -- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) | -| | [105](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_105) | select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where score>(select avg(score) from stumarks) | -| | [106](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_106) | -- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) | -| | [107](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_107) | select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where stumarks.score > any(select score from stumarks where stumarks.stuID='s2501' ) and stuinfo.stuName != '张秋利' | -| | [108](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_108) | -- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) | -| | [109](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_109) | select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where stumarks.score > any(select score from stumarks where stumarks.stuID='s2501' ) and stuinfo.stuName != '张秋利' | -| | [110](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_110) | -- 13.查询班上比所有男生年龄都要大的女生的信息 | -| | [111](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_111) | select stuSex,max(stuAge) from stuinfo where stuSex='女' and stuAge> all(select stuAge from stuinfo where stuSex ='男'); | -| | [112](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_112) | -- 14.查询出只要比某个男生年龄大的女生的信息 | -| | [113](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_113) | select * from stuinfo where stusex = '女' and stuage > (select min(stuage) from stuinfo where stusex = '男'); | -| | | | -| | | | \ No newline at end of file diff --git "a/13 \350\224\241\345\230\211\344\271\220/\350\277\220\347\256\227\347\254\224\350\256\260.md" "b/13 \350\224\241\345\230\211\344\271\220/\350\277\220\347\256\227\347\254\224\350\256\260.md" deleted file mode 100644 index af63850c6ab11ac91ba1d711680be2e1ff11a4f1..0000000000000000000000000000000000000000 --- "a/13 \350\224\241\345\230\211\344\271\220/\350\277\220\347\256\227\347\254\224\350\256\260.md" +++ /dev/null @@ -1,349 +0,0 @@ -## 笔记 - -/* -第5章 SELECT 单表语句 -*/ -#select语句的最简单形式,查看某个常量、变量、表达式的结果 -select 1 as 常量; #别名 外号 -select now() 变量; -select 5+5 "表达式"; -select 6 '测试' - -#查看某个表的数据 -#select * from 表名称; #前提是选择好了,针对哪个库操作,否则会报 No database selected错误 -#select * from 数据库名.表名称; - -use mxdx; -select * from t_employee; - -#查看某些列的数据 -#select 字段列表 from 【数据库名.】表名称; -select ename ,salary from t_employee; -select ename as '名字',salary '工资' from t_employee; -- 使用了别名 - - -#查看某些行的数据 -#select * from 表名称 where 某些行的条件 -#查看薪水少于10000的员工的数据 -select * from t_employee where salary <10000; - -#查看某些行某些列的数据 -#select 某些列 from 表名称 where 某些行的条件 -#查看蔡徐坤的员工编号、薪水 -select ename,salary from t_employee where salary <10000; -select eid,ename,salary from t_employee where ename = '蔡徐坤'; - -#给查询结果列取别名 -#select 字段名 [as] 别名 from 表名; -select eid id,ename as 姓名,salary as '工资' from t_employee where ename = '蔡徐坤'; - -#给表取别名 -#select * from 表名 as 别名 -select ename,salary from t_employee as '员工表';-- 表也可以取别名,但是不能用任何引号 -select ename,salary from t_employee as "员工表"; -select ename,salary from t_employee as 员工表; --- 给查询结果这个临时表取个临时的名称,用什么用?跨表联合查询的时候用得上 - -#mysql可以在查询结果中使用distinct关键字去重。 -#select distinct 字段列表 from 表名称 [where 条件]; -select distinct salary from t_employee order by salary desc; -- distinct 去除重复,但mysql只能放字段前,而且只有一个字段时生效。 - - - - - -第六章 - -算术运算符 -加:+ -减:- -乘:* -除:/ 正常除,有小数 - div 只保留整数部分 -模:% - -*/ -SELECT 1+2; # 3 -SELECT 2-1; # 1 -SELECT 2*8;# 16 -SELECT 9/2;# 4.5 -SELECT 9 DIV 2; # 4 -SELECT 9.9 DIV 2; # 4 -SELECT 9%2; # 1 - -/* - -大于:> -小于:< -大于等于:>= 大于或于等于都满足 -小于等于:<= 小于或等于 -等于:= <=> 安全等于 -不能用于null判断 id = null 因为null是特殊类型。它与任何类型做运算,结果都是null -不等于:!= 或 <> 不能用于null判断 -*/ -SELECT 1=1;# 1 -SELECT * FROM t_employee WHERE eid <=> 1; -SELECT * FROM t_employee WHERE eid == 1;# java才这么写 -SELECT * FROM t_employee WHERE `commission_pct` = NULL; -- 虽然不报错,但结果就 空的 -SELECT * FROM t_employee WHERE `commission_pct` IS NULL; -SELECT * FROM t_employee WHERE `commission_pct` <=> NULL; - -SELECT * FROM t_employee WHERE `commission_pct` != NULL;-- 虽然不报错,但结果就 空的 -SELECT * FROM t_employee WHERE `commission_pct` IS NOT NULL; -SELECT * FROM t_employee WHERE !(`commission_pct` IS NULL); - - -#查询薪资高于15000的员工信息 -select * from t_employee where salary > 15000; - -#查询不是1号部门的员工 -select * from t_employee where did != 1; - -#查询所有的男员工信息 -select * from t_employee where gender = '男'; - -/* -区间范围:between x and y - x<=值<=y - -​ : 包含两端 between 10 and 20 [10,20] 10<= 值 <=20 -​ not between x and y -集合范围:in (x,y,z) : 只要在这个范围就行 in (1,2,3) =1 or =2 or =3 -​ not in(x,x,x) -​ */ -#查询薪资在[10000,15000]之间的员工 -select * from t_employee where salary >=10000 and salary <= 15000; -select * from t_employee where salary between 10000 and 15000; - -#查询薪资不在[10000,15000]之间的员工 -select * from t_employee where salary <10000 or salary > 15000; -select * from t_employee where salary not between 10000 and 15000; -select * from t_employee where !(salary between 10000 and 15000); - - -#查询1,2,3部门的员工 -select * from t_employee where did in (1,2,3); -select * from t_employee where did =1 or did = 2 or did =3; - - -#查询不是1,2,3部门的员工 -select * from t_employee where !(did in (1,2,3)); -select * from t_employee where did not in (1,2,3); - -/* -模糊查询 like - -%:代表任意个字符 : 0个,一个,两个。。。。 - -_:代表一个字符,如果两个下划线代表两个字符 -*/ -#查询名字中包含“熊”字 的员工 -select * from t_employee where ename like '%熊%'; -#把熊大熊二找出来 -select * from t_employee where ename like '熊_'; - - -#查询由3个字组成的名字,且最后一个是“雨”字 的员工 -select * from t_employee where ename like '_雨'; - - -/* - -逻辑与:&& 或 and 并且 -逻辑或:|| 或 or 或者 -逻辑非:! 或 not 不是 (取反) -逻辑异或: xor 两者只能满足其中一个,不能同时满足,不能同时不满足 -*/ -#查询薪资高于15000的男员工 -select * from t_employee where salary > 15000 and gender = '男'; -select * from t_employee where salary > 15000 && gender = '男'; - - -#查询薪资高于15000,或者他是男员工 -select * from t_employee where salary > 15000 or gender = '男'; -select * from t_employee where salary > 15000 || gender = '男'; - - - - -#查询薪资低于10000,或者入职日期在2016-1-1之前的员工 -select * from t_employee where salary <10000 or hiredate < '2016-1-1'; - - -#查询入职日期不在 2016-1-1之前的员工 -select * from t_employee where hiredate >='2016-1-1'; -select * from t_employee where !(hiredate < '2016-1-1'); - - - -#查询薪资低于10000,但是入职日期是在2016-1-1之后的员工 -#或 -#薪资大于等于10000,但是入职日期是在2016-1-1之前的员工 -select * from t_employee where - (salary < 10000 and hiredate >'2016-1-1') - or - (salary >= 10000 and hiredate <'2016-1-1'); - -select * from t_employee where salary < 10000 xor hiredate < '2016-1-1'; - - -/* -分析:要么满足薪资低于10000,要么满足入职日期在2016-1-1之前 <10000 xor <2016-1-1 -只能满足一个。 -*/ --- 找出没有奖金的员工 -select * from t_employee where commission_pct is null; - - -/* -1)判断时xx is null -xx is not null -xx <=> null 相当于 xx is null - -*/ - - - -/* - -(2)计算时ifnull(xx,代替值) 当xx是null时,用代替值计算 ifnull(commission_pct,0) - -#计算所有员工的实发工资 -/* -实发工资 = 工资+ 工资*奖金比例 = 工资*(1+比例) -奖金:工资*奖金比例 -实发工资 = salary * (1+奖金比例)= 工资 + 工资*奖金比例 = salary + salary * commission_pct; -*/ - -select eid 编号,ename 姓名,salary 底薪, commission_pct 奖金比例,salary + salary * ifnull(commission_pct,0) as 实发工资 from t_employee; - --- (2)计算时ifnull(xx,代替值) 当xx是null时,用代替值计算 ifnull(commission_pct,0) - - - - - - - - - - - - - - - -##### 作业 - -第一题 - -```mysql -drop table if exists `employee`; -create database ste charset utf8; -use ste; -create table employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - - - - -**要求1:**查询出薪资在12000~13000之间的员工信息。 -SELECT * from `employee` WHERE salary >=12000 and salary <=13000; -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 -SELECT * from `employee` WHERE -**要求3:**将“李四”的家庭住址改为“广东韶关” / - -**要求4:**查询出名字中带“小”的员工 -SELECT * from `employee` WHERE `name` like '%小%'; -**要求5:**查询出薪资高于11000的男员工信息 -SELECT * from `employee` WHERE salary 。11000 ; -**要求6:**查询没有登记电话号码的员工 / -SELECT * from `employee` WHERE not (tel = null) ; -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 -SELECT (addr) from `employee` WHERE salary >12000 ; -**要求8:**查询每个员工的年薪,显示“姓名、年薪” / -SELECT (`name ` salary) from `employee` WHERE salary; -``` - - - - - -第二题 - -````mysql -DROP TABLE IF EXISTS `countries_info`; -create DATABASE ttt charset utf8; -use ttt; -create TABLE `countries_info` ( -`name` VARCHAR(100), -`continent` VARCHAR(100), -`area` INT, -population INT, -gdp BIGINT -); -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -SELECT* from `countries_info` ; -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -**要求1:** 查询大国 的国家名称、人口和面积。 -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) - -- 人口至少为 2500 万(即 25000000) -select * from `countries_info` WHERE area >3000000 or population> 25000000 ; - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 -select (name, continent,area,population,gdp) from `countries_info` WHERE ; -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 -select * from `countries_info` WHERE area <10000 and population <100000 ; -**要求4:**查询国家名字中包含“o“字母的国家信息 -select * from `countries_info` WHERE name like '%o%' ; - -**要求5:**查询GDP值超过10000000000的国家信息 -select * from `countries_info` WHERE gdp > 10000000000 ; -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” -select name,population,gdp,gdp/population 人均贡献GDP值 from countries_info; -**要求7:**查询人均贡献GDP值低于1000的国家信息。 -select * from `countries_info` WHERE (gdp/population) < 1000 ; -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” -select name,area,population,area/population 人均国土面积值 from countries_info; - -``` -```` - - - diff --git "a/14 \346\235\216\344\277\212\345\205\264/20230219 MySQL\346\225\260\346\215\256\345\272\223\346\246\202\350\277\260.md" "b/14 \346\235\216\344\277\212\345\205\264/20230219 MySQL\346\225\260\346\215\256\345\272\223\346\246\202\350\277\260.md" deleted file mode 100644 index f171af55e9bbe2fedb47ecb3a2fe5bdcc97a2b5d..0000000000000000000000000000000000000000 --- "a/14 \346\235\216\344\277\212\345\205\264/20230219 MySQL\346\225\260\346\215\256\345\272\223\346\246\202\350\277\260.md" +++ /dev/null @@ -1,544 +0,0 @@ -# 第1章 MySQL数据库概述 - -## 1.1、基本概念 - -- 数据库是什么? - - - 存储数据的地方 - - DB:数据库(Database) - - -- 为什么要用数据库? - - 因为应用程序产生的数据是在内存中的,如果程序退出或者是断电了,则数据就会消失。使用数据库是为了能够永久保存数据。当然这里指的是非内存数据库。 - - 用普通文件存储行不行?把数据写入到硬盘上的文件中,当然可以实现持久化的目标,但是不利于后期的检索和管理等。 - - - - 数据库分类 - - - 早期:层次模型、网状模型、关系模型, - - - 随着时间的推移和市场竞争,最终,基于关系模型的关系型数据库获得了绝对市场份额。 - - - 目前市场上主要分: - - 关系型数据库、非关系型数据库两大类 - - - - 数据库有了,要怎么管理呢? - - - DBMS:数据库管理系统 ( DataBase Management System )是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。 - - - MySQL、Oracle、SqlServer都是数据库管理系统(DBMS,Database Management System)是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。 - - -- SQL是什么? - - SQL是结构化查询语言(Structure Query Language),专门用来操作/访问数据库的通用语言。 - - -## 1.2、MySQL数据库管理系统 - -- ​ 根据数据库的分类。DBMS也分两大类: - - 关系型数据库管理系统 :MySQL , Oracle , SQL Server , SQLite , IBM DB2 , ... SQL语言来交互 - - 非关系型数据库管理系统:Redis , MongoDB , ... - -- 什么是关系型数据库和非关系数据库? - - - **关系型数据库**,采用关系模型来组织数据,简单来说,**关系模型指的就是二维表格模型**。类似于Excel工作表。 - - - **非关系型数据库**,可看成传统关系型数据库的功能阉割版本,基于键值对存储数据,通过减少很少用的功能,来提高性能。 - - - 我们要学的MySQL,就是关系型数据库管理系统 - - 在互联网行业,MySQL数据库毫无疑问已经是最常用的数据库。MySQL数据库由瑞典MySQL AB公司开发。该公司于2008年1月16号被Sun(Stanford University Network)公司收购。然而2009年,SUN公司又被Oracle收购。因此,MySQL数据库现在隶属于Oracle(甲骨文)公司。 - - 查看数据库最新排名:https://db-engines.com/en/ranking) - -**MySQL的优点有很多,其中主要的优势有如下几点:** - -- 可移植性:MySQL数据库几乎支持所有的操作系统 -- 免费:MySQL的社区版完全免费,一般中小型网站的开发都选择 MySQL 作为网站数据库。 -- 开源:2000 年,MySQL公布了自己的源代码,并采用GPL(GNU General Public License)许可协议,正式进入开源的世界。 -- 关系型数据库:MySQL可以利用标准SQL语法进行查询和操作。 -- 速度快、体积小、容易使用:从2009年开始,阿里的“去IOE”(去掉IBM的小型机、Oracle的数据库、EMC的存储设备)备受关注,淘宝DBA团队再次从Oracle转向MySQL,其他使用MySQL数据库的公司还有Facebook、Twitter、YouTube、百度、腾讯、去哪儿、魅族等等,自此,MySQL在市场上占据了很大的份额。 -- 安全性和连接性:所有的密码传输均采用加密形式,从而保证了密码安全。由于MySQL是网络化的,因此可以在因特网上的任何地方访问,提高数据共享的效率。 -- 丰富的接口:提供了用于C、C++、Java、PHP、Python、Ruby和Eiffel、Perl等语言的API。 -- 灵活:能够适应高要求的环境。可嵌入到应用程序中,也可以支持数据仓库、内容索引和部署软件、高可用的冗余系统、在线事务处理系统等各种应用类型。 -- MySQL最重要、最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理(Query Processing)及其他系统任务(Server Task)和数据的存储/提取相分离。这种处理和存储分离的设计可以在使用时根据性能、特性,以及其他需求来选择数据存储的方式。MySQL中同一个数据库,不同的表格可以选择不同的存储引擎。其中使用最多的是InnoDB 和MyISAM,MySQL5.5之后InnoDB是默认的存储引擎。 - -**针对不同用户,MySQL提供三个不同的版本。** - -(1)MySQL Enterprise Server(企业版):能够以更高的性价比为企业提供数据仓库应用,该版本需要付费使用,官方提供电话技术支持。 - -(2)MySQL Cluster(集群版):MySQL 集群是 MySQL 适合于分布式计算环境的高可用、高冗余版本。它采用了 NDB Cluster 存储引擎,允许在 1 个集群中运行多个 MySQL 服务器。它不能单独使用,需要在社区版或企业版基础上使用。 - -(3)MySQL Community Server(社区版):在开源GPL许可证之下可以自由的使用。该版本完全免费,但是官方不提供技术支持。我们的知识授课以社区版为主。在MySQL 社区版开发过程中,同时存在多个发布系列,每个发布处在不同的成熟阶段。 - -- **MySQL5.7(RC)是当前稳定的发布系列**。RC(Release Candidate候选版本)版只针对严重漏洞修复和安全修复重新发布,没有增加会影响该系列的重要功能。从MySQL 5.0、5.1、5.5、5.6直到5.7都基于5这个大版本,升级的小版本。5.0版本中加入了存储过程、服务器端游标、触发器、视图、分布式事务、查询优化器的显著改进以及其他的一些特性。这也为MySQL 5.0之后的版本迈向高性能数据库的发展奠定了基础。 -- MySQL8.0.26(GA)是最新开发的稳定发布系列。GA(General Availability正式发布的版本)是包含新功能的正式发布版本。这个版本是MySQL数据库又一个开拓时代的开始。 - -## 1.3、表的关系 - -MySQL是关系型数据库管理系统,而在关系数据库管理系统中,很多表之间是有关系的,表之间的关系分为一对一关系、一对多关系和多对多关系。 - -1. **一对一** - -该关系中第一个表中的一个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关。 - -2. **一对多** - -第一个表中的一个行可以与第二个表中的一个或多个行相关,但第二个表中的一个行只可以与第一个表中的一个行相关 - -3. **多对多** - -该关系中第一个表中的一个行可以与第二个表中的一个或多个行相关。第二个表中的一个行也可以与第一个表中的一个或多个行相关。**通常两个表的多对多关系会借助第三张表,转换为两个一对多的关系。** - -# 第2章 MySQL的卸载、安装和登录 - -MySQL属于**C/S架构**的软件,所以要先安装服务端(**S**erver),再用客户端(**C**lient)进行连接。 B/S - -- 服务器端:MySQL 5.7 -- 客户端:CMD命令行、MySQL自带client、可视化图形界面工具 - -## 2.1、MySQL数据库服务端的安装 - -- 卸载、安装详细请看《[MySQL5.7_安装和使用文档.md](./MySQL5.7安装文档.md)》 - -## 2.2、使用客户端登录MySQL服务器端 - -### 方式一:MySQL自带客户端 - -开始菜单==》所有程序==》MySQL==》MySQL Server 5.7==》MySQL 5.7 Command Line Client - -> 说明:仅限于root用户在本机登录 - -### 方式二:使用cmd命令连接 - -**mysql -h 主机名 -P 端口号 -u 用户名 -p密码** - -```sql -例如:mysql -h localhost -P 3306 -u root -proot -``` - -注意: - -(1)-p与密码之间不能有空格,其他参数名与参数值之间可以有空格也可以没有空格 - -```sql -mysql -hlocalhost -P3306 -uroot -proot -``` - -(2)密码建议在下一行输入 - -```sql -mysql -h localhost -P 3306 -u root -p -Enter password:**** -``` - -(3)如果是连本机:-hlocalhost就可以省略,如果端口号没有修改:-P3306也可以省略 - - 简写成: - -```sql -mysql -u root -p -Enter password:**** -``` - -连接成功后,有关于MySQL Server服务版本的信息,还有第几次连接的id标识。 - -### 方式三: 使用第三方工具navicat连接 - -Mysql常用的三方工具有很多,比如大名鼎鼎的navicat,sqlyog等等,这里我们使用navicat来做一个连接的事例。首先打开工具,在工具左侧选择新建连接,然后选择要连接的数据库为mysql,然后会弹出一个具体的连接配置的窗口。 - -该窗口在正常连接状态下,只需要填入连接名称,主机的地址,连接端口号,用户名及密码即可。填写完毕点击测试,如果测试成功保存就可以打开我们的mysql数据库连接了。 - -## 2.3、MySQL数据库的编码配置 - -### 命令行操作sql乱码问题 - -```mysql -mysql> INSERT INTO t_stu VALUES(1,'张三','男'); -ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'sname' at row 1 -``` - -### 修改my.ini配置文件 - -```ini -在路径:C:\ProgramData\MySQL\MySQL Server 5.7\my.ini 找到my.ini文件 - -修改内容1: - 找到[mysql]命令,大概在63行左右,在其下一行添加 - default-character-set=utf8 -修改内容2: - 找到[mysqld]命令,大概在76行左右,在其下一行添加 - character-set-server=utf8 - collation-server=utf8_general_ci - -修改完毕后,重启MySQL57服务 -``` - -查看编码命令 - -```sql -show variables like 'character_%'; -show variables like 'collation_%'; -``` - -* 如果是以上配置就说明对了 - -### 命令行操作sql仍然乱码问题 - -```mysql -mysql> INSERT INTO t_stu VALUES(1,'张三','男'); -ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'sname' at row 1 -``` - -原因:按照刚才的配置,服务器端认为你的客户端的字符集是utf-8,而实际上你的客户端的字符集是GBK。 - -查看所有字符集:**SHOW VARIABLES LIKE 'character_set_%';** - -解决方案,设置当前连接的客户端字符集 **“SET NAMES GBK;”** - -set names gbk;是为了告诉服务器,客户端用的GBK编码,防止乱码。 - -有的时候,这样还不能解决,例如,某些win10操作系统环境下,那么修改命令行的属性-》选项-》勾选使用旧版控制台,然后重启电脑 - -# 第3章 客户端使用演示 - -## 3.1 命令行客户端 - -### 3.1.1 数据库 - -1、查看所有的数据库 - -```mysql -show databases; -``` - -2、创建自己的数据库 - -```mysql -create database 数据库名 charset utf8; - -#创建mxdx数据库 -create database mxdx; -``` - -3、删除数据库 - -```mysql -drop database 数据库名; - -#删除mxdx数据库 -drop database mxdx; -``` - -4、使用自己的数据库 - -```mysql -use 数据库名; - -#使用mxdx数据库 -use mxdx; -``` - -说明:如果没有使用use语句,后面针对数据库的操作也没有加“数据名”的限定,那么会报“ERROR 1046 (3D000): No database selected”(没有选择数据库) - -使用完use语句之后,如果接下来的SQL都是针对一个数据库操作的,那就不用重复use了,如果要针对另一个数据库操作,那么要重新use。 - -### 3.1.2 数据表 - -1、查看某个库的所有表格 - -```mysql -show tables; #要求前面有use语句 - -show tables from 数据库名; -``` - -2、创建新的表格 - -```mysql -create table 表名称( - 字段名 数据类型, - 字段名 数据类型 -); -``` - -说明:如果是最后一个字段,后面就用加逗号,因为逗号的作用是分割每个字段。 - -```mysql -#创建学生表 -create table student( - id int, - name varchar(20) #说名字最长不超过20个字符 -); -``` - -3、查看定义好的表结构 - -```mysql -desc 表名称; -``` - -```mysql -desc student; -``` - -4、添加一条记录 - -```mysql -insert into 表名称 values(值列表); - -#添加两条记录到student表中 -insert into student values(1,'张三'); -insert into student values(2,'李四'); -``` - -5、查看一个表的数据 - -```mysql -select * from 表名称; -``` - -6、删除表 - -```mysql -drop table 表名称; -``` - -```mysql -#删除学生表 -drop table student; -``` - -### 作业 - -## 第3题 - - 1、创建数据库test03_bookstore -2、创建book表 - -``` -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| sales | int(11) | NO | | NULL | | -| stock | int(11) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -``` -+----+-------------+------------+-------+-------+-------+----------------------------+ -| id | title | author | price | sales | stock | img_path | -+----+-------------+------------+-------+-------+-------+-----------------------------+ -| 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | -| 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | -+----+---------------+------------+-------+-------+-------+----------------------------+ -``` - -3、创建用户表users,并插入数据 - -``` -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| username | varchar(100) | NO | UNI | NULL | | -| password | varchar(100) | NO | | NULL | | -| email | varchar(100) | YES | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -``` -+----+----------+----------------------------------+--------------------+ -| id | username | password | email | -+----+----------+----------------------------------+--------------------+ -| 1 | admin | 112233 | admin@mxdx.com | -+----+----------+----------------------------------+--------------------+ -``` - -4、创建订单表orders - -``` -+--------------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+--------------+--------------+------+-----+---------+-------+ -| id | varchar(100) | NO | PRI | NULL | | -| order_time | datetime | NO | | NULL | | -| total_count | int(11) | NO | | NULL | | -| total_amount | double(11,2) | NO | | NULL | | -| state | int(11) | NO | | NULL | | -| user_id | int(11) | NO | MUL | NULL | | -+--------------+--------------+------+-----+---------+-------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -``` -+----------------+---------------------+-------------+--------------+-------+---------+ -| id | order_time | total_count | total_amount | state | user_id | -+----------------+---------------------+-------------+--------------+-------+---------+ -| 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | -+----------------+---------------------+-------------+--------------+-------+---------+ -``` - -5、创建订单明细表order_items - -``` -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| count | int(11) | NO | | NULL | | -| amount | double(11,2) | NO | | NULL | | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -| order_id | varchar(100) | NO | MUL | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -``` -+----+-------+--------+---------+---------+-------+----------------+----------------+ -| id |count| amount| title | author | price | img_path | order_id | -+----+-------+--------+------------+----------+-------+----------------+----------------+ -| 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | -| 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | -+----+-------+--------+------------+----------+-------+------------+----------------+ -``` - -```mysql -第一题 /* 1、创建数据库 - -2、创建表格customers - -| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date | - -**要求3:**将c_contact字段移动到c_birth字段后面 - -**要求4:**将c_name字段数据类型改为 varchar(70) - -**要求5:**将c_contact字段改名为c_phone - -**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - --- **要求7:**将表名改为customers_info - --- **要求8:**删除字段c_city */ -create database test01_market; -use test01_market; -create table customers( - c_num int(11), - c_name varchar(50), - c_contact varchar(50), - c_city varchar(50), - c_birth date -); -DESC customers; -ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth; # 将字段c_contact放到c_birth后面 -alter table customers modify c_name varchar(70); # 修改字段c_name的数据类型 -alter table customers CHANGE c_contact c_phone VARCHAR(80); # 将 旧字段c_contact修改为c_phone并且修改数据类型为varchar(80) -ALTER table customers add c_gender VARCHAR(20) NULL; # 添加一个新的字段c_gender设置一个新的数据类型,并且设置初始值NULL -ALTER TABLE customers MODIFY c_gender VARCHAR(50) AFTER c_name; # 将字段c_gender放到c_name后面 -rename table customers to new_customers; # 重命名表格的名字 -alter table new_customers drop c_num; # 删除new_customers里面胡c_num字段 -DESC new_customers; # 查看标的结构 - -第二题 /* ## 第2题 - -1、创建数据库test02_library - -2、创建表格books - -| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------- | -------- | ------------- | -------- | ---- | -| b_id | 书编号 | int(11) | 否 | 是 | -| b_name | 书名 | varchar(50) | 否 | 否 | -| authors | 作者 | varchar(100) | 否 | 否 | -| price | 价格 | float | 否 | 否 | -| pubdate | 出版日期 | year | 否 | 否 | -| note | 说明 | varchar(100) | 是 | 否 | -| num | 库存 | int(11) | 否 | 否 | - -3、向books表中插入记录 - -1) 指定所有字段名称插入第一条记录 - -2)不指定字段名称插入第二记录 - -3)同时插入多条记录(剩下的所有记录) - -| b_id | b_name | authors | price | pubdate | note | num | -| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -4、将小说类型(novel)的书的价格都增加5。 - -5、将名称为EmmaT的书的价格改为40。 - -6、删除库存为0的记录 */ - -第三题 /* 1、创建数据库test03_bookstore -2、创建book表 -3、创建用户表users,并插入数据 -4、创建订单表orders -5、创建订单明细表order_items */ -create database test03_bookstore; -use test03_bookstore; -create table book( - id int(11), - title VARCHAR(100), - author VARCHAR(100), - price DOUBLE(11,2), - sales int(11), - stock int(11), - img_path VARCHAR(100) -); -ALTER table book convert to character set utf8; -insert into book VALUES(1,'解忧杂货店','东野硅谷',27.20,102,98,'upload/books/解忧杂货店.jpg'),(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg'); -use test03_bookstore; -create table orders( - id varchar(100), - order_time datetime, - todal_count int(11), - todal_amount DOUBLE(11,2), - state int(11), - user_id int(11) -); -INSERT into orders VALUES(15294258455691,'2018-06-20 00:30:45',2,50.20,0,1); - -CREATE table order_items( - id int(11), - count int(11), - amout double(11,2), - title varchar(100), - author varchar(100), - price double(11,2), - img_path VARCHAR(100), - order_id VARCHAR(100) -); -ALTER table order_items convert to character set utf8; -insert into order_items VALUES(1,1,27.20,'解忧杂货店','东野硅谷',27.20,'static/img/default.jpg',15294258455691),(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg',15294258455691); -``` - diff --git "a/14 \346\235\216\344\277\212\345\205\264/20230222 MySQL\347\272\246\346\235\237.md" "b/14 \346\235\216\344\277\212\345\205\264/20230222 MySQL\347\272\246\346\235\237.md" deleted file mode 100644 index ef21e33413b272c809f1269ebda972d7fa803553..0000000000000000000000000000000000000000 --- "a/14 \346\235\216\344\277\212\345\205\264/20230222 MySQL\347\272\246\346\235\237.md" +++ /dev/null @@ -1,368 +0,0 @@ -## MySQL约束 - -约束:主键、唯一、非空、默认、自增、外键 - -#### 主键约束 - -1. 关键字是primary key -2. 特点:每一个表当中只能有一个主键约束 -3. 主键约束的字段值不允许为null值 -4. 不允许重复 - -解决方法.1:单独使用一个id列当主键 - -解决方法2:复合主键 - -```mysql -create table xuanke( - sid int, - cid int, - score int, - primary key(sid,cid) #它俩组合不能为 null ,并且唯一 -); -``` - -建表后增加约束 - -```mysql -alter table 表名称 add primary key(字段列表); -``` - -如果是一个字段,就是一个字段是主键 (字段列表)如果是多个字段,就是复合主键 - -如果想要删除主键约束 - -```mysql -alter table 表名称 drop primary key; -alter table student dtop primary key; -``` - -#### 唯一键约束 - -1. 关键字:unique key -2. 特点:允许为null -3. 不能重复 -4. 一个表可以有多个唯一键约束 - -建表后增加唯一键约束 - -```mysql -alter table 表名称 add unique key (字段列表); -alter table student add unique key (sname); -``` - -如果用语句删除唯一键约束 - -```mysql -alter table 表名称 drop index 索引名; -``` - -#### 非空约束 - -```mysql -not null # 不允许为空 -``` - -#### 默认值约束 - -如果某个字段,在添加数据时未指定值时,希望不要用null处理而是按照一个默认值处理,就可以使用默认值约束 - -```mysql -default -``` - -删除score的非空约束 - -```mysql -alter table student modify score int; -``` - -增加非空约束 - -```mysql -alter table student modify score int not null; -``` - -删除gender的默认值约束 保留非空约束 - -```mysql -alter table student modify gender enum('男','女') not null; -``` - -#### 检查约束 - -MySQL5.7不支持check约束,在MySQL中开始支持check约束 - -#### 外键约束 - -约束俩个表的关系,或者是一个表的俩个字段之间的关系 - -(1)主表(父表)和从表(子表) 主表:被依赖,被参考 从表:依赖别人的,参考别人的 - -例如:学生表、课程表、选课表 选课表中的学号,它的值是依赖于学生表的学号。 选课表是从表, 学生表是主表。 选课表中的课程编号,它的值是依赖于课程表的课程编号。 选课表是从表, 课程表示主表。 - -(2)外键的建立和指定要在从表中定义 (3)关键字 foreign key (4)格式 - -```mysql -foreign key (从表的字段) references 主表(被依赖字段[主键]) -``` - -(5)要求 A:主表必须先存在 B:主表被依赖字段必须有索引,所以通常是主键列或唯一键列等才能作为被依赖字段。 C:删除表时,要么先删除从表,再删除主表,要么先解除外键约束,然后各自删除。 D:从(子)表的依赖字段的数据,必须在主(父)表被依赖字段中选择。 添加和修改都是这样的。 E:主(父)表被依赖字段的数据不能轻易的删除和修改,要看是否被引用 - -```my -外键约束等级为 on update/delete cascade /(set null) -``` - -7、自增属性 维护某个字段的值自动增长的一个属性。 它的要求: (1)一个表最多只能有一个字段是自增的 (2)自增的字段必须是整数类型 (3)自增的字段必须是键约束的字段(通常是主键、唯一键) - -自增字段赋值为null和0的时候,会自增, 如果赋值为其他的值,按照你指定的值来。 - -```mysql -ALTER TABLE 表名称 AUTO_INCREMENT = 起始值; - -``` - ---- - -## 作业 - -### 第一题 - -```mysql - --- 1、创建数据库test01_company --- -CREATE DATABASE test01_company CHARSET utf8; -use test01_company; --- 2、创建表格offices - --- | 字段名 | 数据类型 | --- | ---------- | ----------- | --- | officeCode | int | --- | city | varchar(30) | --- | address | varchar(50) | --- | country | varchar(50) | --- | postalCode | varchar(25) | -CREATE TABLE offices( -officecode int, -city VARCHAR(30), -address varchar(50), -country VARCHAR(50), -postalcode VARCHAR(25)); --- 3、创建表格employees --- --- | 字段名 | 数据类型 | --- | --------- | ------------- | --- | empNum | int(11) | --- | lastName | varchar(50) | --- | firstName | varchar(50) | --- | mobile | varchar(25) | --- | code | int | --- | jobTitle | varchar(50) | --- | birth | date | --- | Note | varchar(255) | --- | Sex | varchar(5) | -CREATE table employees( -empNum int, -lastName VARCHAR(50), -firstName VARCHAR(50), -mobile VARCHAR(25), -code int, -jobTitle VARCHAR(50), -birth date, -Note VARCHAR(50), -Sex VARCHAR(5)); --- **要求4:**将表employees的mobile字段修改到code字段后面。 -alter table employees MODIFY mobile VARCHAR(25) after code; --- **要求5:**将表employees的birth字段改名为birthday; -alter table employees change birth birthday date; --- **要求6:**修改sex字段,数据类型为char(1)。 -alter table employees MODIFY sex char(1); --- **要求7:**删除字段note; -alter table employees drop note; --- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); -alter table employees add favoriate_activity varchar(100); --- **要求9:**将表employees的名称修改为 employees_info -alter table employees rename to employees_info; -``` - -### 第二题 - -```mysql --- 1、创建数据库test02db -CREATE DATABASE test02db; --- 2、创建表格pet -use test02db; --- | 字段名 | 字段说明 | 数据类型 | --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | -CREATE TABLE pet( -name VARCHAR(20), -owner VARCHAR(20), -species VARCHAR(20), -sex char(1), -birth year, -death year); --- 3、添加记录 --- --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | -INSERT into pet VALUES('Fluffy','harold','Cat','f',2003,2010),('Claws','gwen','Cat','m',2004,null),('Buffy',null,'Dog','f',2009,null),('Fang','benny','Dog','m',2000,null),('bowser','diane','Dog','m',2003,2009),('Chirpy',null,'Bird','f',2008,null); -SELECT * from pet; --- 4、 添加字段主人的生日owner_birth。 -alter table pet add owner_birth VARCHAR(10); --- 5、 将名称为Claws的猫的主人改为kevin -UPDATE pet set owner='kevin' WHERE name='Claws'; -SELECT * from pet; --- 6、 将没有死的狗的主人改为duck -UPDATE pet set owner='duck' WHERE name='Fang'; -SELECT * from pet; --- 7、 查询没有主人的宠物的名字; -SELECT * from pet where isnull(owner); -SELECT owner from pet where isnull; --- 8、 查询已经死了的cat的姓名,主人,以及去世时间; -select name,owner,death from pet where death !='' and species='Cat'; --- 9、 删除已经死亡的狗 -delete FROM pet where death !=''and species='Dog'; --- 10、查询所有宠物信息 -SELECT * from pet; -``` - -### 第三题 - -```mysql --- 1、创建数据库:test03_company -create database test03_company charset utf8; --- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 --- A.部门表(department): --- 部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 -use test03_company ; -create table department( -depid int primary key auto_increment, -depname char(10) not null unique key, -deinfo varchar(200) -); --- B.雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 --- * ​ 雇员编号为主键; --- * ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); --- * ​ 性别默认为男; -create table employee ( -empid int primary key auto_increment, -name varchar(10) not null, -sex enum('男','女') not null default '男', -title varchar(10), -birthday date, -depid int, -foreign key (depid) references department(depid) -); - --- C.工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - --- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) -CREATE table salary( -empid int PRIMARY key auto_increment, -basesalary VARCHAR(50), -titlesalary VARCHAR(50), -deduction VARCHAR(50), -FOREIGN key (empid) REFERENCES employee(empid) -); --- 4、添加数据如下: --- 部门表: --- | 部门编号 | 部门名称 | 部门简介 | --- | -------- | -------- | ------------ | --- | 111 | 生产部 | Null | --- | 222 | 销售部 | Null | --- | 333 | 人事部 | 人力资源管理 | -insert into department VALUES(111,'生产部',null),(222,'销售部',null),(333,'人事部','人力资源管理'); --- 雇员表: - --- | 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | --- | -------- | ---- | ---- | ---------- | ---------- | ------------ | --- | 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | --- | 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | --- | 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | --- | 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | -INSERT into employee VALUES(1001,'张三','男','高级工程师','1975-1-1',111),(1002,'李四','女','助工','1985-1-1',111),(1003,'王五','男','工程师','1978-11-11',222),(1004,'张六','男','工程师','1999-1-1',222); --- 工资表: - --- | 雇员编号 | 基本工资 | 职务工资 | 扣除 | --- | -------- | -------- | -------- | ---- | --- | 1001 | 2200 | 1100 | 200 | --- | 1002 | 1200 | 200 | NULL | --- | 1003 | 2900 | 700 | 200 | --- | 1004 | 1950 | 700 | 150 | -insert into salary VALUES(1001,2200,1100,200),(1002,1200,200,null),(1003,2900,700,200),(1004,1950,700,150); -``` - -### 第四题 - -```mysql --- 1、创建一个数据库:test04_school --- -CREATE DATABASE test04_school CHARSET utf8; --- 2、创建如下表格 --- --- 表1 Department表的定义 --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | --- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | --- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | -use test04_school; -CREATE table department( -DepNo int not null PRIMARY key unique key, -DepName VARCHAR(50) not null, -DepNote varchar(50)); --- 表2 Teacher表的定义 --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | Number | 教工号 | int | 是 | 否 | 是 | 是 | --- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | --- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | --- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | --- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | --- | Salary | 工资 | float | 否 | 否 | 否 | 否 | --- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | -CREATE table teacher( -Number int not null primary key unique key, -Name VARCHAR(30)not null, -Sex varchar(4), -Birth date, -DepNo int, -Salary float, -Address varchar(100), -FOREIGN key (DepNo)REFERENCES department(DepNo)); --- 3、添加记录 --- --- | **DepNo** | **DepName** | **DepNote** | --- | --------- | ----------- | ------------------ | --- | 601 | 软件技术系 | 软件技术等专业 | --- | 602 | 网络技术系 | 多媒体技术等专业 | --- | 603 | 艺术设计系 | 广告艺术设计等专业 | --- | 604 | 管理工程系 | 连锁经营管理等专业 | -INSERT into department VALUES(601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'),(603,'艺术设计系','广告艺术设计等专业'),(604,'管理工程系','连锁经营管理等专业'); --- | **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | --- | ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | --- | 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | --- | 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | --- | 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | --- | 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | --- | 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | -INSERT into teacher VALUES(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'),(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'),(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'),(2004,'James','女','1980-10-20',602,3500,'四川省成都市'),(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); --- 4、用SELECT语句查询Teacher表的所有记录。 -SELECT*from teacher; -``` - diff --git "a/14 \346\235\216\344\277\212\345\205\264/20230228\350\267\250\350\241\250.md" "b/14 \346\235\216\344\277\212\345\205\264/20230228\350\267\250\350\241\250.md" deleted file mode 100644 index 82a09e69b92d63f61b87ef841b6229b052d73e11..0000000000000000000000000000000000000000 --- "a/14 \346\235\216\344\277\212\345\205\264/20230228\350\267\250\350\241\250.md" +++ /dev/null @@ -1,558 +0,0 @@ -### 笔记 - -- **什么是分组查询?** - -> 将查询结果按照1个或多个字段进行分组,字段值相同的为一组 -> 其实就是按照某一列进行分类 - -- **分组使用** - -> **SELECT gender from employee GROUP BY gender;** -> -> 根据gender字段来分组,gender字段的全部值只有两个('男'和'女'),所以分为了两组 -> 当group by单独使用时,只显示出每一组的第一条记录 -> 所以group by单独使用时的实际意义不大 - -![img](https://pic3.zhimg.com/80/v2-2dd056cc432e89898c80cbacf78c3dda_720w.webp) - -对这个表进行GROUP BY操作 - -```text -SELECT * FROM employee; -``` - -![img](https://pic3.zhimg.com/80/v2-650d569e895acc26b20d0a0edc2596e6_720w.webp) - -只显示了每一组第一条记录 - -男生的第一个人是张三 女生的第一个人是王五 - -![img](https://pic2.zhimg.com/80/v2-a289b4d4803b3e9869656420f5c87d75_720w.webp) - -所以说GROUP BY 一般不单独使用 - - - -**一般来说 你按照什么分组 就查询什么东西** - -**比如:** - -```sql -select department from employee group by department; -``` - -查询结果如上。 - -**分完组然后呢?** - -- **如何对分组后的结果进行查询?** - -**关键字:group_concat()** - -将职员表 按照部门分组 查询每个部门职员的姓名 - -```sql -select department,group_concat(name) from employee group by department; -``` - -结果如下: - -![img](https://pic2.zhimg.com/80/v2-ae5227cf66ecdc638e79980dede53499_720w.webp) - ------- - -- **GROUP BY + 聚合函数** - -**for example:** - -将职员表 按照部门分组 查询每个部门职员的薪水 和 **薪水总数** - -```sql -select department,group_concat(salary),sum(salary) from employee group by department; -``` - -![img](https://pic1.zhimg.com/80/v2-9b5ca13455b29ebcf2e598d38ea87754_720w.webp) - -> 查询每个部门的名称 以及 每个部门的人数 - -```mysql -select department,group_concat(name),count(*) from employee group by department; -``` - -> 查询每个部门的部门名称 以及 每个部门工资大于1500的人数 - -PS:**先把大于1500的人查出来 再做分组** - -```sql -select department,group_concat(salary),count(*) from employee group by department; -``` - ------- - -**group by + having** - -- 用来分组**查询后**制定一些条件来输出查询结果 -- having的作用和where一样,但having只能用于group by -- 查询工资总和大于9000的部门名称以及工资和 - -```sql -SELECT department,GROUP_CONCAT(salary),SUM(salary) FROM employee -GROUP BY department HAVING SUM(salary) > 9000; -``` - -- having和where的区别 - -> having是在分组后对数据进行过滤 -> where是在分组前对数据进行过滤 -> having后面可以使用分组函数(统计函数) -> where后面不可以使用分组函数 -> where是对分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组;而having是对分组后数据的约束 - - - -- 查询工资和大于2000的 工资总和大于6000的部门名称以及工资和 - -```sql -SELECT department,GROUP_CONCAT(salary).SUM(salary) FROM employee -WHERE salary > 2000 -GROUP BY department -HAVING SUNM(salary) > 9000 -ORDER BY SUM(salary) DESC; -//降序排列 -``` - ------- - -**书写顺序** - -![img](https://pic3.zhimg.com/80/v2-166d3cee10b01a68e90af2a5d5ed9866_720w.webp) - ------- - -**Limit的使用** - -![img](https://pic3.zhimg.com/80/v2-cc55920af6e230cfe251bf53dd35a9c6_720w.webp) - -```sql -SELECT * FROM employee LIMIT 3,3; -``` - -**从第三行开始 取三条数据** - -**PS:行是从0开始数的** - -![img](https://pic3.zhimg.com/80/v2-320efb37091a14d6e9b35e997c81941a_720w.webp) - -![img](https://pic1.zhimg.com/80/v2-29ecf40b5281d6f98d6a78ecac889ab8_720w.webp) - ------- - -**limit可以用于分页操作** - -![img](https://pic3.zhimg.com/80/v2-71ce51c3e1d647067bc562f362b88ee6_720w.webp) - -- **什么是分组查询?** - -> 将查询结果按照1个或多个字段进行分组,字段值相同的为一组 -> 其实就是按照某一列进行分类 - -- **分组使用** - -> **SELECT gender from employee GROUP BY gender;** -> -> 根据gender字段来分组,gender字段的全部值只有两个('男'和'女'),所以分为了两组 -> 当group by单独使用时,只显示出每一组的第一条记录 -> 所以group by单独使用时的实际意义不大 - -![img](https://pic3.zhimg.com/80/v2-2dd056cc432e89898c80cbacf78c3dda_720w.webp) - -对这个表进行GROUP BY操作 - -```text -SELECT * FROM employee; -``` - -![img](https://pic3.zhimg.com/80/v2-650d569e895acc26b20d0a0edc2596e6_720w.webp) - -只显示了每一组第一条记录 - -男生的第一个人是张三 女生的第一个人是王五 - -![img](https://pic2.zhimg.com/80/v2-a289b4d4803b3e9869656420f5c87d75_720w.webp) - -所以说GROUP BY 一般不单独使用 - - - -**一般来说 你按照什么分组 就查询什么东西** - -**比如:** - -```text -select department from employee group by department; -``` - -![img](https://pic2.zhimg.com/80/v2-9f78a7bd599627321b0323af525d6ff9_720w.webp) - -查询结果如上。 - -**分完组然后呢?** - -- **如何对分组后的结果进行查询?** - -**关键字:group_concat()** - -将职员表 按照部门分组 查询每个部门职员的姓名 - -```text -select department,group_concat(name) from employee group by department; -``` - -结果如下: - -![img](https://pic2.zhimg.com/80/v2-ae5227cf66ecdc638e79980dede53499_720w.webp) - ------- - -- **GROUP BY + 聚合函数** - -**for example:** - -将职员表 按照部门分组 查询每个部门职员的薪水 和 **薪水总数** - -```text -select department,group_concat(salary),sum(salary) from employee group by department; -``` - -![img](https://pic1.zhimg.com/80/v2-9b5ca13455b29ebcf2e598d38ea87754_720w.webp) - -> 查询每个部门的名称 以及 每个部门的人数 - -```mysql -select department,group_concat(name),count(*) from employee group by department; -``` - -> 查询每个部门的部门名称 以及 每个部门工资大于1500的人数 - -PS:**先把大于1500的人查出来 再做分组** - -```sql -select department,group_concat(salary),count(*) from employee group by department; -``` - ------- - -**group by + having** - -- 用来分组**查询后**制定一些条件来输出查询结果 -- having的作用和where一样,但having只能用于group by -- 查询工资总和大于9000的部门名称以及工资和 - -```sql -SELECT department,GROUP_CONCAT(salary),SUM(salary) FROM employee -GROUP BY department HAVING SUM(salary) > 9000; -``` - -- having和where的区别 - -> having是在分组后对数据进行过滤 -> where是在分组前对数据进行过滤 -> having后面可以使用分组函数(统计函数) -> where后面不可以使用分组函数 -> where是对分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组;而having是对分组后数据的约束 - - - -- 查询工资和大于2000的 工资总和大于6000的部门名称以及工资和 - -```sql -SELECT department,GROUP_CONCAT(salary).SUM(salary) FROM employee -WHERE salary > 2000 -GROUP BY department -HAVING SUNM(salary) > 9000 -ORDER BY SUM(salary) DESC; -//降序排列 -``` - ------- - -**书写顺序** - -![img](https://pic3.zhimg.com/80/v2-166d3cee10b01a68e90af2a5d5ed9866_720w.webp) - ------- - -**Limit的使用** - -![img](https://pic3.zhimg.com/80/v2-cc55920af6e230cfe251bf53dd35a9c6_720w.webp) - -```text -SELECT * FROM employee LIMIT 3,3; -``` - -**从第三行开始 取三条数据** - -**PS:行是从0开始数的** - -![img](https://pic3.zhimg.com/80/v2-320efb37091a14d6e9b35e997c81941a_720w.webp) - -![img](https://pic1.zhimg.com/80/v2-29ecf40b5281d6f98d6a78ecac889ab8_720w.webp) - ------- - -**limit可以用于分页操作** - -![img](https://pic3.zhimg.com/80/v2-71ce51c3e1d647067bc562f362b88ee6_720w.webp) - -```mysql -inner join,full outer join,left join,right jion -内部连接 inner join 两表都满足的组合 -full outer 全连 两表相同的组合在一起,A表有,B表没有的数据(显示为null),同样B表有 -A表没有的显示为(null) -A表 left join B表 左连,以A表为基础,A表的全部数据,B表有的组合。没有的为null -A表 right join B表 右连,以B表为基础,B表的全部数据,A表的有的组合。没有的为null - - -查询分析器中执行: ---建表table1,table2: -create table table1(id int,name varchar(10)) -create table table2(id int,score int) -insert into table1 select 1,'lee' -insert into table1 select 2,'zhang' -insert into table1 select 4,'wang' -insert into table2 select 1,90 -insert into table2 select 2,100 -insert into table2 select 3,70 -如表 -------------------------------------------------- -table1|table2| -------------------------------------------------- -idname|idscore| -1lee|190| -2zhang|2100| -4wang|370| -------------------------------------------------- - -以下均在查询分析器中执行 - -一、外连接 -1.概念:包括左向外联接、右向外联接或完整外部联接 - -2.左连接:left join 或 left outer join -(1)左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。 -(2)sql语句 -select * from table1 left join table2 on table1.id=table2.id --------------结果------------- -idnameidscore ------------------------------- -1lee190 -2zhang2100 -4wangNULLNULL ------------------------------- -注释:包含table1的所有子句,根据指定条件返回table2相应的字段,不符合的以null显示 - -3.右连接:right join 或 right outer join -(1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。 -(2)sql语句 -select * from table1 right join table2 on table1.id=table2.id --------------结果------------- -idnameidscore ------------------------------- -1lee190 -2zhang2100 -NULLNULL370 ------------------------------- -注释:包含table2的所有子句,根据指定条件返回table1相应的字段,不符合的以null显示 - -4.完整外部联接:full join 或 full outer join -(1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。 -(2)sql语句 -select * from table1 full join table2 on table1.id=table2.id --------------结果------------- -idnameidscore ------------------------------- -1lee190 -2zhang2100 -4wangNULLNULL -NULLNULL370 ------------------------------- -注释:返回左右连接的和(见上左、右连接) - -二、内连接 -1.概念:内联接是用比较运算符比较要联接列的值的联接 - -2.内连接:join 或 inner join - -3.sql语句 -select * from table1 join table2 on table1.id=table2.id --------------结果------------- -idnameidscore ------------------------------- -1lee190 -2zhang2100 ------------------------------- -注释:只返回符合条件的table1和table2的列 - -4.等价(与下列执行效果相同) -A:select a.*,b.* from table1 a,table2 b where a.id=b.id -B:select * from table1 cross join table2 where table1.id=table2.id (注:cross join后加条件只能用where,不能用on) - -三、交叉连接(完全) - -1.概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生3*3=9条记录) - -2.交叉连接:cross join (不带条件where...) - -3.sql语句 -select * from table1 cross join table2 --------------结果------------- -idnameidscore ------------------------------- -1lee190 -2zhang190 -4wang190 -1lee2100 -2zhang2100 -4wang2100 -1lee370 -2zhang370 -4wang370 ------------------------------- -注释:返回3*3=9条记录,即笛卡尔积 - -4.等价(与下列执行效果相同) -A:select * from table1,table2 -``` - -### 作业 - -```mysql -drop database users; -create database users charset=utf8; -use users; -create table Student( -Sno varchar(20) not null comment'学号', -Sname varchar(20) not null comment'学生姓名', -Ssex varchar(20) not null comment'学生性别', -primary key(Sno), -Sbirthday datetime comment'学生出生年月', -Class varchar(20) comment'学生所在班级' -) comment'学生表'; -create table Course( -Cno varchar(20) not null comment'课程号', -Cname varchar(20) not null comment'课程名称', -primary key(Cno), -Tno varchar(20) not null comment'教工编号' -) comment'课程表'; -create table Score( -Sno varchar(20) not null comment'学号', -Cno varchar(20) not null comment'课程号', -primary key(Sno,Cno), -Degree Decimal(4,1) comment'成绩' -) comment'成绩表'; -create table Teacher( -Tno varchar(20) not null comment'教工编号', -Tname varchar(20) not null comment'教工姓名', -Tsex varchar(20) not null comment'教工性别', -Tbirthday datetime comment'教工出生年月', -Prof varchar(20) comment'职称', -primary key(Tno), -Depart varchar(20) not null comment'教工所在部门' -) comment'教师表'; -alter table Course -add foreign key(Tno) references Teacher(Tno); -insert into Student -values -(108,'曾华','男','1977-9-1',95033), -(105,'匡明','男','1975-10-2',95031), -(107,'王丽','女','1976-1-23',95033), -(101,'李军','男','1976-2-20',95033), -(109,'王芳','女','1975-2-10',95031), -(103,'陆君','男','1974-6-3',95031); -set @@foreign_key_checks=0; -insert into Course -values -('3-105','计算机导论',825), -('3-245','操作系统',804), -('6-166','数字电路',856), -('9-888','高等数学',831); -insert into Score -values -(103,'3-245',86), -(105,'3-245',76), -(109,'3-245',68), -(103,'3-105',92), -(105,'3-105',88), -(109,'3-105',76), -(101,'3-105',64), -(107,'3-105',91), -(108,'3-105',78), -(101,'6-166',85), -(107,'6-166',79), -(108,'6-166',81); -insert into Teacher -values -(804,'李诚','男','1958-12-2','副教授','计算机系'), -(856,'张旭','男','1969-3-12','讲师','电子工程系'), -(825,'王萍','女','1972-5-5','助教','计算机系'), -(831,'刘冰','女','1977-8-14','助教','电子工程系'); -set @@foreign_key_checks=1; --- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ -select * from Student inner join Course; --- 2,查询没有学生的教师的所有信息 -select Tname from Student inner join Teacher WHERE Sno having null; -4. 查询 -① 查询Score表中的最高分的学生学号和课程号。 -select Sno,Cno from Score where Degree =92 ; -select Sno,Cno from Score WHERE Degree <=> (Select MAX(Degree) from Score); -② 查询所有学生的Sname、Cno和Degree列。 -select Sname,Cno,Degree from Student cross join Score on Student.Sno = Score.Sno ; -③ 查询所有学生的Sno、Cname和Degree列。 -select Student.Sno,Cname,Degree from Student inner join Course cross join Score on Student.Sno = Score.Sno and Course.Cno = Score.Cno; -④ 查询所有学生的Sname、Cname和Degree列。 -select Sname,Cname,Degree from Student inner join Course cross join Score on Student.Sno = Score.Sno and Course.Cno = Score.Cno ; -⑤ 查询“95033”班学生的平均分。 -select AVG(Degree),Class from Student inner join Score on Student.Sno = Score.Sno where Class=95033; -⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 -select Sno from Score where Degree > 76; -select Sno from Score where Degree> (select Degree from Score where Cno = '3-105' and Sno = 109) ; -⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 -select Degree from Score where Degree < (select MAX(Degree) from Score); -⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 -select * from Score where Degree >76; -select * from Score where Degree> (select Degree from Score where Cno = '3-105' and Sno = 109) ; -⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 -select Sno,Sname,Sbirthday from Student where Sbirthday=1977; -select Sno,Sname,Sbirthday from Student group by Sbirthday having Sbirthday = Sno = 108 and Sbirthday ; -⑩ 查询“张旭“教师任课的学生成绩。 -select Degree from Teacher inner join Score where Tname='张旭'; -11 查询选修某课程的同学人数多于5人的教师姓名。 -select distinct Tname from Score inner join Teacher where Sno >5; -12 查询出“计算机系“教师所教课程的成绩表。 -select distinct Degree from Teacher inner join Score where Depart ='计算机系'; -13 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 -select Tname,Prof from Teacher where Depart ='计算机系' or Depart ='电子工程系'; -14 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 -select Cno,Sno,Degree from Score where Cno ='3-105' xor Degree > Cno ='3-245' xor Degree order by Degree desc ; -15 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. -select Cno,Sno,Degree from Score where Cno ='3-105' xor Degree > Cno ='3-245' xor Degree; -16 查询成绩比该课程平均成绩低的同学的成绩表。 -select Degree from Score where Degree <(select AVG(Degree) from Score); -17 查询所有任课教师的Tname和Depart. -select Tname,Depart from Teacher; -18 查询所有未讲课的教师的Tname和Depart. -select Tname,Depart from Teacher inner join Course where Cname is null; -19 查询“男”教师及其所上的课程。 -select Tname,Tsex,Cname from Teacher inner join Course where Tsex ='男'; -20 查询最高分同学的Sno、Cno和Degree列。 -select Sno,Cno,Degree from Score where Degree =92; -select Sno,Cno,Degree from Score where Degree = (select MAX(Degree) from Score); -21 查询和“李军”同性别的所有同学的Sname. -select Sname from Student where Ssex ='男' and Sname != '李军'; -22 查询和“李军”同性别并同班的同学Sname. -select Sname from Student where Ssex ='男' and Sname != '李军' and Class ='95033'; -23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 -select Degree from Course inner join Score cross join Student on Student.Sno = Score.Sno where Cname ='计算机导论' and Ssex ='男'; - -``` - diff --git "a/14 \346\235\216\344\277\212\345\205\264/20232.23 \346\237\245\350\257\242select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" "b/14 \346\235\216\344\277\212\345\205\264/20232.23 \346\237\245\350\257\242select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" deleted file mode 100644 index 6b0181a1e8bcb963cc5eaf95d3663d8fe0596e21..0000000000000000000000000000000000000000 --- "a/14 \346\235\216\344\277\212\345\205\264/20232.23 \346\237\245\350\257\242select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" +++ /dev/null @@ -1,361 +0,0 @@ -# 2.23 查询select语句和运算符 - -### select语句格式: - -```mysql -SELECT 字段列表 FROM 表名称; - -SELECT 字段列表 FROM 表名称 WHERE 条件; -``` - -### 使用别名(临时名称) - -```mysql -select 字段名1 as "别名1", 字段名2 as "别名2" from 表名称 as 别名; -``` - -- 列的别名有空格时,请加双引号。**==列的别名==中没有空格时,双引号可以加也可以不加**。 -- ==**表的别名不能加双引号**==,表的别名中间不能包含空格。 -- as大小写都可以,as也完全可以省略。 - -```mysql -示例: -mysql> select id "学号",name "姓名" from student; -+------+------+ -| 学号 | 姓名 | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) - -mysql> select id 学号,name 姓名 from student; -+------+------+ -| 学号 | 姓名 | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) -``` - -### 结果去重 - -mysql可以在查询结果中使用distinct关键字去重。 - -```mysql -select distinct 字段列表 from 表名称 【where 条件】; - -示例: -select distinct did from t_employee; -``` - -### 算术运算符 - -```mysql -加:+ - 在MySQL +就是求和,没有字符串拼接 -减:- -乘:* -除:/ div(只保留整数部分) - div:两个数相除只保留整数部分 - /:数学中的除 -模:% mod - -mysql中没有 +=等运算符 -``` - -### 比较运算符 - -```mysql -大于:> -小于:< -大于等于:>= -小于等于:>= -等于:= 不能用于null判断 -不等于:!= 或 <> 不能用于null判断 -判断是null 用 is null 或 用 <=> null -判断不是null is not null -``` - -### 区间或集合范围比较运算符 - -```mysql -区间范围:between x and y - not between x and y -集合范围:in (x,x,x) - not in(x,x,x) -between ... and ... 结果包含两端的边界 - -示例: -#查询薪资在[10000,15000] -select * from t_employee where salary>=10000 && salary<=15000; -select * from t_employee where salary between 10000 and 15000; - -#查询籍贯在这几个地方的 -select * from t_employee where work_place in ('北京', '浙江', '江西'); - -#查询薪资不在[10000,15000] -select * from t_employee where salary not between 10000 and 15000; - -#查询籍贯不在这几个地方的 -select * from t_employee where work_place not in ('北京', '浙江', '江西'); -``` - -### 模糊匹配比较运算符 - -%:代表任意个字符 - -_:代表一个字符,如果两个下划线代表两个字符 - -```mysql -示例: -#查询名字中包含'冰'字 -select * from t_employee where ename like '%冰%'; - -#查询名字以‘雷'结尾的 -select * from t_employee where ename like '%远'; - -#查询名字以’李'开头 -select * from t_employee where ename like '李%'; - -#查询名字有冰这个字,但是冰的前面只能有1个字 -select * from t_employee where ename like '_冰%'; - -#查询当前mysql数据库的字符集情况 -show variables like '%character%'; -``` - -### 逻辑运算符 - -```mysql -逻辑与:&& 或 and -逻辑或:|| 或 or -逻辑非:! 或 not -逻辑异或: xor - -示例: -#查询薪资高于15000,并且性别是男的员工 -select * from t_employee where salary>15000 and gender='男'; -select * from t_employee where salary>15000 && gender='男'; - -select * from t_employee where salary>15000 & gender='男';#错误得不到值 &按位与 -select * from t_employee where (salary>15000) & (gender='男'); - -#查询薪资高于15000,或者did为1的员工 -select * from t_employee where salary>15000 or did = 1; -select * from t_employee where salary>15000 || did = 1; - -#查询薪资不在[15000,20000]范围的 -select * from t_employee where salary not between 15000 and 20000; -select * from t_employee where !(salary between 15000 and 20000); - -#查询薪资高于15000,或者did为1的员工,两者只能满足其一 -select * from t_employee where salary>15000 xor did = 1; -select * from t_employee where (salary>15000) ^ (did = 1); -``` - -### 关于null值的问题、 - -```mysql -#(1)判断时 -xx is null -xx is not null -xx <=> null - -#(2)计算时 -ifnull(xx,代替值) 当xx是null时,用代替值计算 - -示例: -#查询员工的实发工资,实发工资 = 薪资 + 薪资 * 奖金比例 -select ename , salary + salary * commission_pct "实发工资" from t_employee; #失败,当commission_pct为null,结果都为null - -select ename ,salary , commission_pct, salary + salary * ifnull(commission_pct,0) "实发工资" from t_employee; -``` - -### 位运算符 - -```mysql -左移:<< -右移:>> -按位与:& -按位或:| -按位异或:^ -按位取反:~ -``` - - - -# 作业 - -## 第1题:员工表 - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - -```mysql -CREATE DATABASE test03 CHARSET utf8; -USE test03; - -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - -**要求1:**查询出薪资在12000~13000之间的员工信息。 - -```mysql -SELECT * FROM employee WHERE salary BETWEEN 12000 AND 13000; -``` - -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -```mysql -SELECT id,`name`,addr FROM employee WHERE `name` LIKE '刘%'; -``` - -**要求3:**将“李四”的家庭住址改为“广东韶关” - -```mysql -UPDATE employee SET addr = '广东韶关' WHERE `name` = '李四'; -``` - -**要求4:**查询出名字中带“小”的员工 - -```mysql -SELECT `name` FROM employee WHERE `name` LIKE '%小%'; -``` - -**要求5:**查询出薪资高于11000的男员工信息 - -```mysql -SELECT * FROM employee WHERE salary>11000 AND sex='男'; -``` - -**要求6:**查询没有登记电话号码的员工 - -```mysql -SELECT `name` FROM employee WHERE tel is NULL; -``` - -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -```mysql -SELECT `name` FROM employee WHERE sex = '男' AND salary = 12000 OR addr = '广东深圳' OR addr='广东广州'; -``` - -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - -```mysql -SELECT `name`,salary FROM employee; -``` - - - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -``` - -**要求1:** 查询大国 的国家名称、人口和面积。 - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) - -- 人口至少为 2500 万(即 25000000) - - ```mysql - SELECT `name`,area,population FROM countries_info WHERE area>3000000 OR population>=25000000; - ``` - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -```mysql -SELECT * FROM countries_info WHERE continent = 'Asia'; -``` - -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -```mysql -SELECT * FROM countries_info WHERE area<10000 AND population<100000; -``` - -**要求4:**查询国家名字中包含“o“字母的国家信息 - -```mysql -SELECT * FROM countries_info WHERE `name` LIKE '%o%'; -``` - -**要求5:**查询GDP值超过10000000000的国家信息 - -```mysql -SELECT * FROM countries_info WHERE gdp>10000000000; -``` - -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -```mysql -SELECT `name` 国家名,population 人口,gdp GDP值,gdp/population AS 人均贡献GDP值 FROM countries_info; -``` - -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - -```mysql -SELECT * FROM countries_info WHERE gdp/population<1000; -``` - -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -```mysql -SELECT `name` 国家名,population 人口,gdp GDP值,area/population AS 人均国土面积值 FROM countries_info; -``` - diff --git "a/14 \346\235\216\344\277\212\345\205\264/\345\255\220\346\237\245\350\257\242.md" "b/14 \346\235\216\344\277\212\345\205\264/\345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index b1bb9bc190752caf946952c754176e503b7cfe6f..0000000000000000000000000000000000000000 --- "a/14 \346\235\216\344\277\212\345\205\264/\345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,264 +0,0 @@ -### 7大字句 - -1. from : 从哪些表中筛选 -2. on : 关联多表查询时,去除笛卡尔积 -3. where : 从表中筛选的条件 -4. group by : 分组依据 -5. having:在统计结果中再次筛选 -6. order by: 排序 -7. limit:分页 - -必须按照(1)~(7)的顺序 编写字句 - -**from字句** - -```mysql -# 1.from 语句 -select * -from t_employee; -``` - -**on字句** - -```sql --- (1) on 必须配合 join 使用 --- on 后面只写关联条件 --- 所谓的关联条件 是俩表的关联字段的关系 --- 有n张表关联,就有n-1个关联条件 --- 两张表关联,就有1个关联条件 --- 三张表关联,就有2个关联条件 -SELECT * -FROM t_employee INNER JOIN t_department -ON t_employee.did = t_department.did; -``` - -**where语句** - -```sql -# where 子句 在查询结果中筛选 -SELECT * -FROM t_employee INNER JOIN t_department -ON t_employee.did = t_department.did -WHERE gender = '女'; -``` - -**group by** - -```sql -group by -- 分组 -``` - -**having语句** - -```sql -/*having子句也写条件 -where的条件是针对原表中的记录的筛选。where后面不能出现分组函数。 -having子句是对统计结果(分组函数计算后)的筛选。having可以加分组函数。 -*/ -``` - -**limit语句** - -```sql -/*limit子句是用于分页显示结果。 -limit m,n -n:表示最多该页显示几行 -m:表示从第几行开始取记录,第一个行的索引是0 -m = (page-1)*n page表示第几页*/ -``` - -### 子查询 - -子查询 就是嵌套在一个SQL 语句中的查询 SELECT语句可以嵌套在另一个SELECT中,UPDATE,DELETE,INSERT,CREATE语句等。 - -#### select的where或HAVing中嵌套子查询 - -当子查询结果作为外层另一个SQL的过滤条件,通常把子查询嵌入到WHERE或HAVING中。根据子查询结果的情况,分为如下三种情况。 - -+ 单列 单个值 可以直接使用比较运算符如 < > <= >= = != 等于子查询结果进行比较 -+ 子查询结果为单列 多个值 直接 用 IN 或者 NOT IN -+ 单列 单个值 可以直接使用比较运算符如 < > <= >= = != 等于子查询结果进行比较 还可以 搭配 any 、some 、all 等关键字与查询结果进行比较 - -```sql -/*在where或having后面的子查询结果是: -(1)单个值,那么可以用=,>,<,>=,<=,!=这样的运算符和子查询的结果做比较 -(2)多个值,那么需要用in,not in, >all,>any....形式做比较 - 如“<”、“<=”、“>”、“>=”、“=”、“!=”等搭配ANY、SOME、ALL等关键字与查询结果进行比较*/ -``` - -**SELECT中的EXISTS型子查询** - -EXISTS型子查询也是存在外层SELECT的WHERE子句中,不过它和上面的WHERE型子查询的工作模式不相同,所以这里单独讨论它。 - -如果EXISTS关键字后面的参数是一个任意的子查询,系统将对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS的结果为false,此时外层查询语句不进行查询。EXISTS和NOT EXISTS的结果只取决于是否返回行,而不取决于这些行的内容,所以这个子查询输入列表通常是无关紧要的。 - -如果EXISTS关键字后面的参数是一个关联子查询,即子查询的WHERE条件中包含与外层查询表的关联条件,那么此时将对外层查询表做循环,即在筛选外层查询表的每一条记录时,都看这条记录是否满足子查询的条件,如果满足就再用外层查询的其他WHERE条件对该记录进行筛选,否则就丢弃这行记录。 - -**SELECT的FROM中嵌套子查询** - -当子查询结果是多列的结果时,通常将子查询放到FROM后面,然后采用给子查询结果取别名的方式,把子查询结果当成一张“动态生成的临时表”使用。 - -## 作业 - -```sql -create database ZyClass2 charset utf8; -use ZyClass2; -create table stuinfo( - stuNO varchar(10) primary key, - stuName varchar(5), - stuSex varchar(2), - stuAge int , - stuAddress varchar(10), - stuSeat int -); - -create table stuExam( - examNO int auto_increment primary key, - stuNO varchar(10) , - writtenExam int, - labExam int, - constraint sn foreign key(stuno) references stuinfo(stuno) -); - -create table stuMarks( - examNo int , - stuID varchar(10), - score int, - constraint en foreign key(examno) references stuexam(examno) -); - -insert into stuinfo values -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'湖北武汉',2), -('s2503','马文才','男',18,'湖南长沙',3), -('s2504','欧阳俊雄','女',21,'湖北武汉',4), -('s2505','梅超风','男',16,'湖北武汉',5), -('s2506','陈旋风','男',19,'美国硅谷',6); - - -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); - - -insert into stumarks values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); - --- 在如图的数据表上完成以下题目 - --- 1.查询出年龄比班上平均年龄大的学生的信息 - select * from stuinfo where stuage > (select avg(stuage) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) - select i.stuno,stuName,stusex,m.sc - from - stuinfo i,(select stuid, max(score) sc from stumarks group by stuid) m - where i.stuNO=m.stuID ; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) - select si.stuNO,stuname,stusex,round((avg(se.writtenExam+se.labExam)/2),2) 平均值 - from - stuinfo si,stuexam se - where si.stuNO=se.stuNO group by stuno; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) - - #普通查询 - select * - from - stuinfo - where stuSex='男' and stuage >='20'; - - #子查询 - select * - from - (select *from stuinfo where stuSex='男') s - where stuage >='20'; - --- 5.查询出年龄比所有男生年龄都大的女生的信息 - select * - from - stuinfo - where - stuage > all (select stuage from stuinfo where stuSex='男') and stuSex='女'; --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) - select distinct si.* - from - stuinfo si right join stumarks sm on si.stuNO=sm.stuID - where - stuno != (select stuid from stumarks where score<60) ; --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - - #方法一:表连接 - select distinct si.* - from - stuinfo si right join stumarks sm - on si.stuNO=sm.stuID; - - #方法二:in - select * - from - stuinfo - where - stuno in(select distinct stuid from stumarks); - --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - - #方法一:表连接 - select si.* - from - stuinfo si left join stumarks sm - on si.stuNO=sm.stuID - where - stuno != all (select distinct stuid from stumarks); - - #方法二:in - select * - from - stuinfo si left join stumarks sm - on si.stuNO=sm.stuID - where - stuno not in(select distinct stuid from stumarks); - --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) - select * - from - stuinfo where stuno - in - (select stuid from stumarks where score >'90'); --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) - select * from stuinfo where stuno = - (select stuid from - (select stuid, avg(score) a from stumarks group by stuid) s where a>80); --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) - select si.* - from - stuinfo si left join stuexam se - on si.stuno = se.stuno - where - se.writtenexam > (select writtenexam from stuexam where stuno = 's2501') - and se.labexam > (select labexam from stuexam where stuno = 's2501'); --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) - select distinct si.* - from - stuinfo si right join stumarks sm on si.stuno=sm.stuID - where score > any - (select score from stuinfo si right join stumarks sm on si.stuno=sm.stuID where stuname='张秋利') and stuno != 's2501'; --- 13.查询班上比所有男生年龄都要大的女生的信息 - select * - from stuinfo - where stuage > all - (select stuage from stuinfo where stusex='男') and stusex='女'; --- 14.查询出只要比某个男生年龄大的女生的信息 - select * - from stuinfo - where stuage > any - (select stuage from stuinfo where stusex='男') and stusex='女'; -``` - diff --git "a/16 \351\230\231\350\213\217\346\226\207/20230214DDL,DML\347\254\224\350\256\260.md" "b/16 \351\230\231\350\213\217\346\226\207/20230214DDL,DML\347\254\224\350\256\260.md" deleted file mode 100644 index 85ee4f4dd78982c6667d77307e2ad92fb7121027..0000000000000000000000000000000000000000 --- "a/16 \351\230\231\350\213\217\346\226\207/20230214DDL,DML\347\254\224\350\256\260.md" +++ /dev/null @@ -1,34 +0,0 @@ -# 笔记 - -- 数据库是什么? - - 存储数据的地方 - - DB:数据库(Database) - - -- 为什么要用数据库? - - 因为应用程序产生的数据是在内存中的,如果程序退出或者是断电了,则数据就会消失。使用数据库是为了能够永久保存数据。当然这里指的是非内存数据库。 - - 用普通文件存储行不行?把数据写入到硬盘上的文件中,当然可以实现持久化的目标,但是不利于后期的检索和管理等。 - - - - 数据库分类 - - - 早期:层次模型、网状模型、关系模型, - - - 随着时间的推移和市场竞争,最终,基于关系模型的关系型数据库获得了绝对市场份额。 - - - 目前市场上主要分: - - 关系型数据库、非关系型数据库两大类 - - - - 数据库有了,要怎么管理呢? - - - DBMS:数据库管理系统 ( DataBase Management System )是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。 - - - MySQL、Oracle、SqlServer都是数据库管理系统(DBMS,Database Management System)是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。 - - -- SQL是什么? - - - SQL是结构化查询语言(Structure Query Language),专门用来操作/访问数据库的通用语言。 - - 关系型数据库中的 数据,数据表,数据库,数据库管理系统,SQL 之间的联系 \ No newline at end of file diff --git "a/16 \351\230\231\350\213\217\346\226\207/20230216MySQL\347\254\224\350\256\260.md" "b/16 \351\230\231\350\213\217\346\226\207/20230216MySQL\347\254\224\350\256\260.md" deleted file mode 100644 index 5a0e3d7680fbee0588c45918b3ddd54c7b790eb3..0000000000000000000000000000000000000000 --- "a/16 \351\230\231\350\213\217\346\226\207/20230216MySQL\347\254\224\350\256\260.md" +++ /dev/null @@ -1,31 +0,0 @@ -# 笔记 - -SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。 - -## SQL的分类 - -| 名称 | 解释 | 命令 | -| :-------------------: | :-------------------------------------------: | :----------------------------------------------------------: | -| DDL (数据定义语言) | 定义和管理数据对象结构,如数据库,数据表等 | 创建(create),修改(alter),删除(drop) show(展示)结构 | -| DML (数据操作语言) | 用于操作数据库对象中所包含的数据 | 增(insert),删(delete),改(update) 数据 | -| DQL (数据查询语言) | 用于查询数据库数据 | 查(select) | -| DCL (数据控制语 言) | 用于管理数据库的语言,包括管理权限及数 据更改 | grant(授权),commit(确认),rollback(回滚) | - -其他语句:USE语句,SHOW语句,SET语句等。这类的官方文档中一般称为命令。 - -## SQL语法规范 - -(1)mysql的sql语法不区分大小写 - -- A:数据库的表中的数据是否区分大小写。这个的话要看表格的字段的数据类型、编码方式以及校对规则。 - -​ ci(大小写不敏感),cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关,区分大小写) - -- B:sql中的关键字,比如:create,insert等,不区分大小写。但是大家习惯上把关键字都“大写”。 - - -(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 - -(3)建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) - -(4)数据库和表名、字段名等对象名中间不要包含空格 \ No newline at end of file diff --git "a/16 \351\230\231\350\213\217\346\226\207/20230220MySQL\347\254\224\350\256\260\345\222\214\344\275\234\344\270\232.md" "b/16 \351\230\231\350\213\217\346\226\207/20230220MySQL\347\254\224\350\256\260\345\222\214\344\275\234\344\270\232.md" deleted file mode 100644 index 6ffedd445b03ec3a40fe5e17fcaf8c624808f30b..0000000000000000000000000000000000000000 --- "a/16 \351\230\231\350\213\217\346\226\207/20230220MySQL\347\254\224\350\256\260\345\222\214\344\275\234\344\270\232.md" +++ /dev/null @@ -1,288 +0,0 @@ -# 笔记 - -数据库(Database) - -定点 decimal默认(10,0)其他 同上 - -浮点 float double - -float(M,N)1 M表示限制整数+小数,一共只能存放M位长度,n限制小数的长度,如果小数部分超过了n会自动截断并四舍五入 - -字符串 - -固定长度的char默认是1,最大的是255 - -可变长度varchar(M)65535 这里的M不可以缺省 - -时间类型 date 年月日 time 时分秒 year datetime timestamp - -unsigned 无符号的 表示正数不能负数 - -null允许为空,not null 不允许为空 - -SQL语法 - -大小写不分 - -一般以;结尾 - -库名,表名,字段名(列名) 支持英文字母、-、数字 class two classTwo - -名称中,不要用空格 class two - -名称中,不能用SQL语句的关键字,create - -# 作业一 - -```java --- 1、创建数据库test01_market -CREATE DATABASE test01_market; -USE test01_market; --- 2、创建表格customers -CREATE TABLE customers( -c_num int(11), -c_name VARCHAR(50), -c_contact VARCHAR(50), -c_city VARCHAR(50), -c_birth date -); - --- | 字段名 | 数据类型 | --- | --------- | ----------- | --- | c_num | int(11) | --- | c_name | varchar(50) | --- | c_contact | varchar(50) | --- | c_city | varchar(50) | --- | c_birth | date | --- --- **要求3:**将c_contact字段移动到c_birth字段后面 -ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth; --- **要求4:**将c_name字段数据类型改为 varchar(70) -ALTER TABLE customers MODIFY c_name VARCHAR(70); --- **要求5:**将c_contact字段改名为c_phone -ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); --- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -ALTER TABLE customers ADD c_gender CHAR(1) AFTER c_name; --- **要求7:**将表名改为customers_info -ALTER TABLE customers RENAME TO customers_info; --- **要求8:**删除字段c_city -ALTER TABLE customers_info DROP c_city; -DESC customers_info; -``` - -# 作业二 - -```java --- 1、创建数据库test02_library --- -CREATE DATABASE test02_library; -USE test02_library; --- 2、创建表格books --- -ALTER DATABASE test02_library CHARSET utf8; -ALTER TABLE books CHARSET utf8; -CREATE TABLE books( -b_id int(11), -b_name VARCHAR(50), -authors VARCHAR(100), -price float, -pubdate year, -note VARCHAR(100), -num int(100) -); -DESC books; --- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | --- | ------- | -------- | ------------- | -------- | ---- | --- | b_id | 书编号 | int(11) | 否 | 是 | --- | b_name | 书名 | varchar(50) | 否 | 否 | --- | authors | 作者 | varchar(100) | 否 | 否 | --- | price | 价格 | float | 否 | 否 | --- | pubdate | 出版日期 | year | 否 | 否 | --- | note | 说明 | varchar(100) | 是 | 否 | --- | num | 库存 | int(11) | 否 | 否 | --- --- 3、向books表中插入记录 --- --- 1) 指定所有字段名称插入第一条记录 --- -insert into books (b_id,b_name,authors,price,pubdate,note,num) values (1,'TalofAAA','Dickes',23,'1995','nove1',11); --- 2)不指定字段名称插入第二记录 --- -insert into books values (2,'EmmaT','janelure',35,'1993','joke',22); --- 3)同时插入多条记录(剩下的所有记录) --- -insert into books values (3,'StoryofJane','JaneTim',40,'2001','novel',0),(4,'LoveyDay','GeorgeByron',20,'2005','novel',30),(5,'Oldland','HonoreBlade',30,'2010','law',0),(6,'TheBattle','UptonSara',30,'1999','medicine',40),(7,'RoseHood','Richardhaggard',28,'2008','cartoon',28); --- | b_id | b_name | authors | price | pubdate | note | num | --- | ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | --- | 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | --- | 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | --- | 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | --- | 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | --- | 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | --- | 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | --- | 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | --- --- 4、将小说类型(novel)的书的价格都增加5。 --- -UPDATE books set price = price+5 WHERE note='nove1'; --- 5、将名称为EmmaT的书的价格改为40。 --- -UPDATE books set price = 40 where b_name='EmmaT'; --- 6、删除库存为0的记录 -DELETE FROM books WHERE num=0; -``` - -# 作业三 - -```java --- 1、创建数据库test03_bookstore --- -CREATE DATABASE test03_bookstore; -USE test03_bookstore; -ALTER DATABASE test02_library CHARSET utf8; -ALTER TABLE book CHARSET utf8; --- 2、创建book表 --- -CREATE TABLE book( - id int(11), - title varchar(100), - author varchar(100), - price double(11,2), - sales int(11), - stock int(11), - img_path varchar(100) -); -DESC book; --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | sales | int(11) | NO | | NULL | | --- | stock | int(11) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----+-------------+------------+-------+-------+-------+----------------------------+ --- | id | title | author | price | sales | stock | img_path | --- +----+-------------+------------+-------+-------+-------+-----------------------------+ --- | 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | --- | 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | --- +----+---------------+------------+-------+-------+-------+----------------------------+ --- ``` --- -INSERT INTO book VALUES (1,'解忧杂货店','东野圭吾',27.2,102,98,'upload/books/解忧杂货店.jpg') -,(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg'); --- 3、创建用户表users,并插入数据 --- -CREATE TABLE users( -id int(11), -username varchar(100), -password varchar(100), -email varchar(100) -); --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | username | varchar(100) | NO | UNI | NULL | | --- | password | varchar(100) | NO | | NULL | | --- | email | varchar(100) | YES | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----+----------+----------------------------------+--------------------+ --- | id | username | password | email | --- +----+----------+----------------------------------+--------------------+ --- | 1 | admin | 112233 | admin@mxdx.com | --- +----+----------+----------------------------------+--------------------+ --- ``` -INSERT into users VALUES (1,'admin',112233,'admin@mxdx.com'); --- --- 4、创建订单表orders --- --- ```mysql --- +--------------+--------------+------+-----+---------+-------+ --- | Field | Type | Null | Key | Default | Extra | --- +--------------+--------------+------+-----+---------+-------+ --- | id | varchar(100) | NO | PRI | NULL | | --- | order_time | datetime | NO | | NULL | | --- | total_count | int(11) | NO | | NULL | | --- | total_amount | double(11,2) | NO | | NULL | | --- | state | int(11) | NO | | NULL | | --- | user_id | int(11) | NO | MUL | NULL | | --- +--------------+--------------+------+-----+---------+-------+ --- ``` --- -create table orders( -id varchar(100), -order_time datetime, -total_count int(11), -total_amount double(11,2), -state int(11), -user_id int(11) -); - --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | id | order_time | total_count | total_amount | state | user_id | --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | --- +----------------+---------------------+-------------+--------------+-------+---------+ --- ``` -INSERT into ortetime VALUES ('15294258455691','2018-06-20 00:30:45',2,50.20,0,1); --- --- 5、创建订单明细表order_items --- --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | count | int(11) | NO | | NULL | | --- | amount | double(11,2) | NO | | NULL | | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- | order_id | varchar(100) | NO | MUL | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- -create table order_items( -id int(11), -count int(11), -amount double(11,2), -title varchar(100), -author varchar(100), -price double(11,2), -img_path varchar(100), -order_id varchar(100) -); --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----+-------+--------+---------+---------+-------+----------------+----------------+ --- | id |count| amount| title | author | price | img_path | order_id | --- +----+-------+--------+------------+----------+-------+----------------+----------------+ --- | 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | --- | 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | --- +----+-------+--------+------------+----------+-------+------------+----------------+ --- ``` -insert into order_items values (1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg','15294258455691'),(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg','15294258455691'); - -``` - diff --git "a/16 \351\230\231\350\213\217\346\226\207/20230222\347\272\246\346\235\237\347\254\224\350\256\260.md" "b/16 \351\230\231\350\213\217\346\226\207/20230222\347\272\246\346\235\237\347\254\224\350\256\260.md" deleted file mode 100644 index 511641a13f3df176339886957d87a491475992c8..0000000000000000000000000000000000000000 --- "a/16 \351\230\231\350\213\217\346\226\207/20230222\347\272\246\346\235\237\347\254\224\350\256\260.md" +++ /dev/null @@ -1,348 +0,0 @@ -# 笔记 - -约束 主键、唯一、非空、默认、自增、外键 - -1、主键约束 -(1)关键字是primary key -(2)特点 -A:每一个表只能有一个主键约束 -B:主键约束的字段值是不允许为null,也不允许重复的 - -如果希望某个字段的值,是唯一的,但不要求非空,它也不是主键。 - -就可以给这样的字段加唯一键约束 - -2、唯一键约束: - -(1)关键字:unique key - -(2)特点 - -A:允许为null,但是不能重复 - -B:一个表可以有多个唯一键约束 - -3、非空约束 - -如果某个字段,不要求唯一,但是要求非空。那么就可以给字段加非空约束。 - -4、默认值约束 - -如果某个字段,在添加数据时未指定值时,希望不要用NULL处理,而是按照一个默认值处理, - -就可以使用默认值约束。 - -检查约束 (MySQL5.7不支持CHECK约束,在MySQL8.0中开始支持CHECK约束) - -6、外键约束 - -约束两个表的关系,或者是一个表的两个字段之间的关系。 - -(1)主表(父表)和从表(子表) - -主表:被依赖,被参考 - -从表:依赖别人的,参考别人的 - -外键约束等级为 on update/delete cascade /(set null) - -7、自增属性 - -维护某个字段的值自动增长的一个属性。 - -它的要求: - -(1)一个表最多只能有一个字段是自增的 - -(2)自增的字段必须是整数类型 - -(3)自增的字段必须是键约束的字段(通常是主键、唯一键) - -自增字段赋值为null和0的时候,会自增, - -如果赋值为其他的值,按照你指定的值来。 - -# 作业 - -```java -## 第1题 - -/*-- 1、创建数据库test01_company*/ -CREATE DATABASE test01_company; -USE test01_company; -2、创建表格offices -CREATE table offices( - officeCode int, - city varchar(30), - address varchar(50), - country varchar(50), - postalCode varchar(25) -); --- | 字段名 | 数据类型 | --- | ---------- | ----------- | --- | officeCode | int | --- | city | varchar(30) | --- | address | varchar(50) | --- | country | varchar(50) | --- | postalCode | varchar(25) | --- --- 3、创建表格employees --- -CREATE table employees( - empNum int(11), - lastName varchar(50), - firstName varchar(50), - mobile varchar(25), - `code` int, - jobTitle varchar(50), - birth date, - Note varchar(255), - Sex varchar(5) -); --- | 字段名 | 数据类型 | --- | --------- | ------------- | --- | empNum | int(11) | --- | lastName | varchar(50) | --- | firstName | varchar(50) | --- | mobile | varchar(25) | --- | code | int | --- | jobTitle | varchar(50) | --- | birth | date | --- | Note | varchar(255) | --- | Sex | varchar(5) | --- --- **要求4:**将表employees的mobile字段修改到code字段后面。 --- - ALTER table employees modify mobile VARCHAR(25) AFTER `code`; --- **要求5:**将表employees的birth字段改名为birthday; --- - ALTER table employees change birth birthday date; --- **要求6:**修改sex字段,数据类型为char(1)。 --- - alter table employees modify sex char(1); --- **要求7:**删除字段note; --- - alter table employees drop column note; --- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); --- - alter table employees add favoriate_activity VARCHAR(100); --- **要求9:**将表employees的名称修改为 employees_info - alter table employees rename employees_info; - - - -``` - -```java -## 第2题 - --- 1、创建数据库test02db --- -create database test02db; -use test02db; --- 2、创建表格pet --- -create table pet( - name varchar(20) COMMENT'宠物名称', - owner varchar(20) comment'宠物主人', - species varchar(20) comment'种类', - sex char(1) comment'性别', - birth year comment'出生日期', - death year comment'死亡日期' -); --- | 字段名 | 字段说明 | 数据类型 | --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | --- --- 3、添加记录 -insert into pet (`name`,`owner`,species,sex,birth,death) values ('Fluffy','harold','Cat','f',2003,2010), - ('Claws','gwen','Cat','m',2004,NULL), - ('Butty',NULL,'Dog','f',2009,NULL), - ('Fang','benny','Dog','m',2000,NULL), - ('bowser','diane','Dog','m',2003,2009), - ('Chirpy',NULL,'Bird','f',2008,NULL); --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | --- --- 4、 添加字段主人的生日owner_birth。 --- -alter table pet add owner_birth date; --- 5、 将名称为Claws的猫的主人改为kevin --- -UPDATE pet SET `owner` = 'kevin' WHERE `name` = 'Claws'; --- 6、 将没有死的狗的主人改为duck --- -update pet set `owner` ='duck'where `name` ='Fang'; -update pet set `owner` ='duck'where `name` ='bowser'; --- 7、 查询没有主人的宠物的名字; --- -SELECT `name` FROM pet WHERE `owner` IS NULL; --- 8、 查询已经死了的cat的姓名,主人,以及去世时间; --- -SELECT `name`, `owner`, death FROM pet WHERE species='Cat'and death=2010; --- 9、 删除已经死亡的狗 --- -delete from pet where species='dog' and death=2009; --- 10、查询所有宠物信息 -SELECT * FROM pet; -``` - -```java --- 第3题 --- 1、创建数据库:test03_company -create database test03_company; -use test03_company; -CREATE database test03_company CHARSET utf8; --- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 --- --- A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 -create table department( - depid int not null primary key , - depname char(6) not null unique key, - deinfo varchar(300) -); --- B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 --- --- * ​ 雇员编号为主键; --- * ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); --- * ​ 性别默认为男; -create table employee ( - empid int primary key auto_increment, - name varchar(10) not null, - sex enum('男','女') not null default '男', - title varchar(10), - birthday date, - depid int foreign key references department(depid) -) --- C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 -create table salary( -empid int not null primary key, -basesalary VARCHAR(2000) not null, -titlesalary VARCHAR(5000) not null, -deduction VARCHAR(1000) not null -); --- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) --- 4、添加数据如下: --- --- 部门表: --- --- | 部门编号 | 部门名称 | 部门简介 | --- | -------- | -------- | ------------ | --- | 111 | 生产部 | Null | --- | 222 | 销售部 | Null | --- | 333 | 人事部 | 人力资源管理 | --- -INSERT INTO department (depid,depname,deinfo) -VALUES(111,'生产部',NULL),(222,'销售部',NULL),(333,'人事部','人力资源管理'); --- 雇员表: --- --- | 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | --- | -------- | ---- | ---- | ---------- | ---------- | ------------ | --- | 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | --- | 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | --- | 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | --- | 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | --- -INSERT INTO employee (empid,name,sex,title,birthday,depid) VALUES -(1001,'张三','男','高级工程师','1975-1-1',111), -(1002,'李四','女','助工','1985-1-1',111), -(1003,'王五','男','工程师','1978-11-11',222), -(1004,'张六','男','工程师','1999-1-1',222); --- 工资表: --- --- | 雇员编号 | 基本工资 | 职务工资 | 扣除 | --- | -------- | -------- | -------- | ---- | --- | 1001 | 2200 | 1100 | 200 | --- | 1002 | 1200 | 200 | NULL | --- | 1003 | 2900 | 700 | 200 | --- | 1004 | 1950 | 700 | 150 | -INSERT INTO salary (empid,basesalary,titlesalary,deduction) VALUES -(1001,2200,1100,200), -(1002,1200,200,null), -(1003,2900,700,200), -(1004,1950,700,150); -``` - -```java -## 第4题 - --- 1、创建一个数据库:test04_school --- -CREATE database test04_school; -use test04_school; --- 2、创建如下表格 --- --- 表1 Department表的定义 --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | --- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | --- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | --- -CREATE table Department( -DepNo int(10) not null PRIMARY key UNIQUE key comment '部门号', -DepName VARCHAR(20) not null comment '部门名称', -DepNote VARCHAR(50) comment '部门备注' -); --- 表2 Teacher表的定义 --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | Number | 教工号 | int | 是 | 否 | 是 | 是 | --- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | --- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | --- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | --- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | --- | Salary | 工资 | float | 否 | 否 | 否 | 否 | --- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | --- -CREATE table Teacher( -Number int not null primary key unique key comment '教工号', -`Name` VARCHAR(30) not null comment '姓名', -Sex VARCHAR(4) COMMENT '性别', -Birth date comment '出生日期', -DepNo int FOREIGN key comment '部门号', -Salry float comment '工资', -Address VARCHAR(100) comment '家庭地址' -); --- 3、添加记录 --- --- | **DepNo** | **DepName** | **DepNote** | --- | --------- | ----------- | ------------------ | --- | 601 | 软件技术系 | 软件技术等专业 | --- | 602 | 网络技术系 | 多媒体技术等专业 | --- | 603 | 艺术设计系 | 广告艺术设计等专业 | --- | 604 | 管理工程系 | 连锁经营管理等专业 | --- -alter table Department (DepNo,DepName,DepNote) values (601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'),(603,'艺术设计系','广告艺术设计等专业'),('604,管理工程系','连锁经营管理等专业'); --- | **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | --- | ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | --- | 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | --- | 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | --- | 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | --- | 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | --- | 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | --- -ALTER table Teacher (Number,`Name`,Sex,Birth,DepNo,Salary,Address)values -(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'), -(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'), -(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'), -(2004,'James','女','1980-10-20',602,3500,'四川省成都市'), -(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); --- 4、用SELECT语句查询Teacher表的所有记录。 -SELECT * from Teacher; -select * from department; -``` - diff --git "a/16 \351\230\231\350\213\217\346\226\207/20230224\350\277\220\347\256\227\347\254\246\344\275\234\344\270\232.md" "b/16 \351\230\231\350\213\217\346\226\207/20230224\350\277\220\347\256\227\347\254\246\344\275\234\344\270\232.md" deleted file mode 100644 index dfdaadd7f871fd95f7a31b3fbaa40b9942291372..0000000000000000000000000000000000000000 --- "a/16 \351\230\231\350\213\217\346\226\207/20230224\350\277\220\347\256\227\347\254\246\344\275\234\344\270\232.md" +++ /dev/null @@ -1,195 +0,0 @@ -# 笔记 - -SELECT语句 - -SELECT语句是用于查看计算结果、或者查看从数据表中筛选出的数据的。 - -SELECT语句的基本语法: - -**使用别名** - -在当前select语句中给某个字段或表达式计算结果,或表等取个临时名称,便于当前select语句的编写和理解。这个临时名称称为别名。 - -结果去重 - -mysql可以在查询结果中使用distinct关键字去重。 - -```mysql -select distinct 字段列表 from 表名称 【where 条件】; -select distinct did from t_employee; -``` - -**算术运算符(掌握)** - -加:+ - - 在MySQL +就是求和,没有字符串拼接 - -减:- - -乘:* - -除:/ div(只保留整数部分) - - div:两个数相除只保留整数部分 - - /:数学中的除 - -模:% mod - -比较运算符(掌握) - -\```mysql - -大于:> - -小于:< - -大于等于:>= - -小于等于:>= - -等于:= 不能用于null判断 - -不等于:!= 或 <> 不能用于null判断 - -判断是null 用 is null 或 用 <=> null - -判断不是null is not null - -**区间或集合范围比较运算符(掌握)** - -\```mysql - -区间范围:between x and y - - not between x and y - -集合范围:in (x,x,x) - - not in(x,x,x) - - between ... and ... 结果包含两端的边界 - -**模糊匹配比较运算符(掌握)** - -%:代表任意个字符 - -_:代表一个字符,如果两个下划线代表两个字符 - -\```mysql - - **逻辑运算符(掌握)** - -\```mysql - -逻辑与:&& 或 and - -逻辑或:|| 或 or - -逻辑非:! 或 not - -逻辑异或: xor - -\``` - -**关于null值的问题(掌握)** - -\```mysql - -\#(1)判断时 - -xx is null - -xx is not null - -xx <=> null - -**所有的计算遇到的null都是null\**** - -# 作业 - -```MySQL -#第1题:员工表 -create database abc charset utf8; -use abc; -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -select * from employee; -#**要求1:**查询出薪资在12000~13000之间的员工信息。 -select * from employee where salary between 12000 and 13000; -#**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 -select id,`name`,addr from employee where `name` like '%刘%'; -#**要求3:**将“李四”的家庭住址改为“广东韶关” -update employee set addr='广东韶关' where name='李四'; -#**要求4:**查询出名字中带“小”的员工 -select * from employee where name like '%小%'; -#**要求5:**查询出薪资高于11000的男员工信息 -select * from employee where salary>11000 and sex ='男'; -#**要求6:**查询没有登记电话号码的员工 -select * from employee where tel is null; -#**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 -select * from employee where salary >12000 or addr ='广东深圳' or addr ='广东广州'; -#**要求8:**查询每个员工的年薪,显示“姓名、年薪” -select `name`,salary*12 as 年薪 from employee; - - -``` - -```mysql -## 第2题:国家信息表 -#countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 -create database aass charset utf8; -use aass; -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -#**要求1:** 查询大国 的国家名称、人口和面积。 -#如果一个国家满足下述两个条件之一,则认为该国是 大国 : -#- 面积至少为 300万平方公里(即,3000000 km2) -#- 人口至少为 2500 万(即 25000000) -select `name`,population,area from countries_info where area>3000000 or population>25000000; -#**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 -select `name`,continent,area,population,gdp from countries_info where continent = 'asia'; -#**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 -select * from countries_info where area <10000 and population <100000; -#**要求4:**查询国家名字中包含“o“字母的国家信息 -select * from countries_info where `name` like '%o%'; -#**要求5:**查询GDP值超过10000000000的国家信息 -select * from countries_info where gdp>10000000000; -#**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” -select name 国家名,population,gdp GDP值,gdp/population 人均贡献GDP值 from countries_info; -#**要求7:**查询人均贡献GDP值低于1000的国家信息。 -select * from countries_info where gdp/population<1000; -#**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” -select `name` 国家名,area 面积,population 人口,area/population 人均国土面积值 from countries_info; -``` - diff --git "a/16 \351\230\231\350\213\217\346\226\207/20230301\350\201\224\350\241\250\346\237\245\350\257\242\345\222\214\345\207\275\346\225\260\347\254\224\350\256\260\344\275\234\344\270\232.md" "b/16 \351\230\231\350\213\217\346\226\207/20230301\350\201\224\350\241\250\346\237\245\350\257\242\345\222\214\345\207\275\346\225\260\347\254\224\350\256\260\344\275\234\344\270\232.md" deleted file mode 100644 index 3fb213a68d4a6618a04d1bba48f4ee9862e7a2ff..0000000000000000000000000000000000000000 --- "a/16 \351\230\231\350\213\217\346\226\207/20230301\350\201\224\350\241\250\346\237\245\350\257\242\345\222\214\345\207\275\346\225\260\347\254\224\350\256\260\344\275\234\344\270\232.md" +++ /dev/null @@ -1,286 +0,0 @@ -# 笔记 - -## 函数 - -MySQL中的函数分为两大类: - -(1)系统预定义的函数,可以直接调用 - -(2)用户自定义的函数,需要自己声明,然后才能使用(基本阶段不讲) - -系统预定义的函数又可以分为两大类 - -(1)单行函数 - -所谓单行函数是指 一行记录通过单行函数计算完结果还是一行。 - -单行函数 - -1、数学函数 - -CEIL(2.4) 向上取整 - -FLOOR(2.4) 向取整 - -ROUND(M,N) 保留M的N位小数,小数位超过N会四舍五入 - -TRUNCATE(M,N) 保留M的N位小数,小数位超过N ,直接截断 不四舍五入 - -*/ - -2、字符串函数 - -CONCAT(x,y,z) 拼接xyz - -CONCAT_WS(a,x,y,z) ,用a来拼接xyz - -3、日期时间函数 - -CURDATE() 当前日期 - -CURTIME() 当前时间 - -NOW() 当前日期+时间 - -year() 取年 - -month() 取月 - -day() 取天 - -DATEDIFF(date1,date2)/TIMEDIFF(time1,time2) 返回两个时间的间隔 - -(2)多行函数,聚合函数,分组函数 - -所谓多行函数是指 一行或多行记录通过单行函数计算完,结果的记录数会减少。 - -分组函数 - -AVG(x) :求平均值 - -SUM(x):求总和 - -MAX(x):求最大值 - -MIN(x):求最小值 - -COUNT(x):统计记录数 - -count(*)是对满足条件的(如果没有where条件,就是对所有记录)记录累加数量 - -count(常量值)等价于count(*) - -count(字段名/表达式) 只统计非NULL值的记录数 - -count(*)或count(常量值):都是统计实际的行数。 - -count(字段/表达式):只统计“字段/表达式”部分非NULL值的行数。 - -## 关联查询 - -关联查询:两个或更多个表一起查询。 - -又称为联合查询,多表查询 - -1、关联查询的结果一共有7种: - -两个表的记录分为四种: - -①A表中的记录能在B表中找到对应的记录 - -②A表中的记录在B表中找不到对应的记录 - -③B表中的记录可以在A表找到对应的记录 - -④B表中的记录在A表中找不到对应的记录 - -(1)A∩B ①③ - -(2)A ①② - -(3)A-A∩B ② - -(4)B ③④ - -(5)B-A∩B ④ - -(6)A∪B ①②③④ - -(7)A∪B-A∩B **②④** - -2.两个表要一起查询,要有前提条件:有关联 - -**就是有相同逻辑意义和数据类型的字段** - -如何实现7种查询结果 - -(1)内连接 inner join - -(2)外连接 outer join - -左外连接 left outer join 或 left join - -右外连接 right outer join 或 right join - -全外连接 full outer join 或 full join -- union 代替 - -但是,mysql不支持全外连接,没有full join。 - -mysql使用union关键字合并其他的查询结果实现全外连接的效果。 - -内连接 ==> A∩B - -左连接 ==> A 或 A-A∩B - -右连接 ==> B 或 B-A∩B - -全外连接 ==> A∪B 或 A∪B - A∩B - - 左连接的A union 右连接的B 得到 A∪B - - 左连接的A-A∩B union 右连接B-A∩B 得到 A∪B - A∩B - -4、内连接 inner join - -A表 inner join B表 on 关联条件 - -5、左连接 left join - -(1)A表:A表 left join B表 on A表.关联字段 = B表.关联字段 - -(2)A-A∩B: - - A表 left join B表 on A表.关联字段 = B表.关联字段 - - where 从表.关联字段 is null - - 从表是A和B 看占从表位置的表。 - -6、右连接 right join - -(1)B表:A表 right join B表 on A表.关联字段 = B表.关联字段 - -(2)B-A∩B: - - A表 right join B表 on A表.关联字段 = B表.关联字段 - - where 从表.关联字段 is null - - 从表是A还是B 得看占从表位置的表。 - -使用union实现全外连接的效果 - -(1)A∪B - -转换为 左连接的A union 右连接的B - -(2)A∪B - A∩B - -转换为 左连接的A-A∩B union 右连接的B-**A∩B** - -# 作业 - -```mysql -create database abc charset utf8; -use abc; -create table Student( -Sno varchar (20) primary key not null, -Sname varchar (20) not null, -Ssex varchar (20)not null, -Sbirthday datetime null, -Class varchar (20) null -); -create table Teacher( -Tno varchar (20) primary key not null, -Tname varchar (20) not null, -Tsex varchar (20) not null, -Tbirthday datetime null, -Prof varchar (20) null, -Depart varchar (20) not null -); -create table Course( -Cno varchar (20) primary key, -Cname varchar (20) not null, -Tno varchar (20) not null, -foreign key(Tno) references Teacher(Tno) -); -create table Score( -Sno varchar (20) not null, -Cno varchar (20) not null, -Degree Decimal(4,1) null, -foreign key(Sno) references Student(Sno), -foreign key(Cno) references Course(Cno) -); -alter table student charset utf8; -alter table course charset utf8; -alter table score charset utf8; -alter table Teacher charset utf8; -insert into Student values -('108','曾华','男','1977-9-1','95033'), -('105','匡明','男','1975-10-2','95031'), -('107','王丽','女','1976-1-23','95033'), -('101','李军','男','1976-2-20','95033'), -('109','王芳','女','1975-2-10','95031'), -('103','陆君','男','1974-6-3','95031'); -insert into Course(Cno,Cname,Tno) values -('3-105','计算机导论','825'), -('3-245','操作系统','804'), -('6-166','数字电路','856'), -('9-888','高等数学','831'); -insert into Teacher(Tno,Tname,Tsex,Tbirthday,Prof,Depart) values -('804','李诚','男','1958-12-2','副教授','计算机系'), -('856','张旭','男','1969-3-12','讲师','电子工程系'), -('825','王萍','女','1972-5-5','助教','计算机系'), -('831','刘冰','女','1977-8-14','助教','电子工程系'); -insert into Score(Sno,Cno,Degree) values -('103','3-245','86'), -('105','3-245','75'), -('109','3-245','68'), -('103','3-105','92'), -('105','3-105','88'), -('109','3-105','76'), -('101','3-105','64'), -('107','3-105','91'), -('108','3-105','78'), -('101','6-166','85'), -('107','6-166','79'), -('108','6-166','81'); --- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ -select * from Student inner join Score inner join Course on -Student.Sno=Score.Sno and Score.Cno=Course.Cno; --- -- 2,查询没有学生的教师的所有信息 -select --- 4. 查询 -select * from student; --- ① 查询Score表中的最高分的学生学号和课程号。 -select sno,cno from score where degree = (select max(degree) from score); - --- ② 查询所有学生的Sname、Cno和Degree列。 -select Sname,Cno,Degree from student join score on student.Sno=score.Sno; - --- ③ 查询所有学生的Sno、Cname和Degree列。 -select Sno,Cname,degree from Score join Course on Course.Cno=Score.Cno --- ④ 查询所有学生的Sname、Cname和Degree列。 -select Sname,Cno,Degree from student join Score on student.Sno=Score.Sno --- ⑤ 查询“95033”班学生的平均分。 -select AVG(Degree) from Score where Sno in (select Sno from student where Class='95033') --- ⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 --- ⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 --- ⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 --- ⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 --- ⑩ 查询“张旭“教师任课的学生成绩。 --- 11 查询选修某课程的同学人数多于5人的教师姓名。 --- 12 查询出“计算机系“教师所教课程的成绩表。 --- 13 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 --- 14 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 --- 15 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. --- 16 查询成绩比该课程平均成绩低的同学的成绩表。 --- 17 查询所有任课教师的Tname和Depart. --- 18 查询所有未讲课的教师的Tname和Depart. --- 19 查询“男”教师及其所上的课程。 --- 20 查询最高分同学的Sno、Cno和Degree列。 --- 21 查询和“李军”同性别的所有同学的Sname. --- 22 查询和“李军”同性别并同班的同学Sname. --- 23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 -``` - diff --git "a/16 \351\230\231\350\213\217\346\226\207/20230308\345\255\220\346\237\245\350\257\242.md" "b/16 \351\230\231\350\213\217\346\226\207/20230308\345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index 2f4ba37e05083f11c9e2bd44aeede66904751e23..0000000000000000000000000000000000000000 --- "a/16 \351\230\231\350\213\217\346\226\207/20230308\345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,74 +0,0 @@ -# 作业 - -```mysql -CREATE DATABASE queryl charset utf8; -use queryl; -CREATE table stuinfo( -stuNO varchar(10), -stuName varchar(10), -stuSex varchar(10), -stuAge double, -stuAddress varchar(10), -stuSeat int -); -insert into stuinfo (stuno,stuname,stusex,stuage,stuaddress,stuseat) values -('s2501','张秋利','男','20','美国硅谷',1),('s2502','李斯文','女','18','湖北武汉',2), -('s2503','马文才','男','18','湖南长沙',3),('s2504','欧阳俊雄','女','21','湖北武汉',4), -('s2505','梅超风','男','16','湖北武汉',5),('s2506','陈旋风','男','19','美国硅谷',6); -create table stuExam( -examNO int, -stuNO varchar(10), -writtenExam varchar(100), -labExam varchar(100) -); -insert into stuExam (examNO,stuNO,writtenExam,labexam) values -(1,'s2501','50','70'),(2,'s2502','60','70'), -(3,'s2503','86','70'),(4,'s2504','40','80'), -(5,'s2505','70','85'),(6,'s2506','85','90'); -create table stuMarks( -examNo int, -stulD varchar(10), -score varchar(100) -); -insert into stuMarks (examno,stuld,score) VALUES -(1,'s2501','88'),(2,'s2501','92'),(3,'2501','53'), -(4,'s2502','60'),(5,'s2502','99'),(6,'s2503','82'); --- 在如图的数据表上完成以下题目 --- -select * from stuinfo; --- 1.查询出年龄比班上平均年龄大的学生的信息 -select * from stuinfo where stuage>(select avg(stuage) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) - -SELECT a.stuno,stuname,stusex,max( score ) FROM stuinfo a left JOIN stumarks b ON a.stuno = b.stuid; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) --- -select a.stuno,stuname,stusex,((writtenExam+labExam)/2) 考试平均分 from stuinfo a left join stuexam b on a.stuno = b.stuno; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -select * from stuinfo where stusex = '男' and stuage >= 20; -select * from stuinfo where stusex = '男' and stuAge in (select stuage from stuinfo where stuage>=20); --- 5.查询出年龄比所有男生年龄都大的女生的信息 -select * from stuinfo where stuage>(select stuAge from stuinfo where stuSex='男' LIMIT 1)&& stuSex='女'; --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -select * from stumarks a right join stuinfo b on a.stuid=b.stuNO where a.stuid not in (select stuid from stumarks where score<60) GROUP BY stuName; - --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select a.* from stuinfo a left join stuexam b on a.stuNO=b.stuNO; -select * from stuinfo where stuNO in (SELECT stuno from stuexam); --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -SELECT distinct i.* from stuinfo i LEFT JOIN stumarks m on i.stuNO = m.stuID where m.stuID is null; -SELECT * from stuinfo where stuNO not in(SELECT distinct stuID from stumarks); --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -SELECT i.* from stuinfo i LEFT JOIN stumarks m on i.stuNO=m.stuID where score>90; --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -SELECT i.*,avg(score) as 平均分 from stumarks m LEFT JOIN stuinfo i on i.stuNO=m.stuID GROUP BY stuID HAVING 平均分>80 ; --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) -SELECT i.* from stuinfo i LEFT JOIN stumarks m on i.stuNO = m.stuID where score>(SELECT max(score) from stumarks m RIGHT JOIN stuinfo i on i.stuNO=m.stuid where i.stuName='张秋利'); --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) -SELECT i.* from stuinfo i LEFT JOIN stumarks m on i.stuNO = m.stuID where score >(SELECT score from stumarks m RIGHT JOIN stuinfo i on i.stuNO=m.stuid where i.stuName='张秋利' ORDER BY score asc LIMIT 1) && i.stuName!='张秋利' GROUP BY m.stuID; --- 13.查询班上比所有男生年龄都要大的女生的信息 -SELECT * from stuinfo where stuAge>(SELECT stuAge from stuinfo where stuSex='男' LIMIT 1); --- 14.查询出只要比某个男生年龄大的女生的信息 -SELECT * from stuinfo where stuSex='女' && stuAge>(SELECT min(stuAge) FROM stuinfo where stuSex='男'); -``` - diff --git "a/17 \345\221\250\345\257\214/20230219 mysql\347\254\224\350\256\260.md" "b/17 \345\221\250\345\257\214/20230219 mysql\347\254\224\350\256\260.md" deleted file mode 100644 index 4691ee7b139182bf70dd8509855d71d5e0d3c462..0000000000000000000000000000000000000000 --- "a/17 \345\221\250\345\257\214/20230219 mysql\347\254\224\350\256\260.md" +++ /dev/null @@ -1,268 +0,0 @@ -# MySQL语法 - -1.不分大小写 - -2.一般以;结尾 - -3.库名,表名,字段名(列名),支持英文字母,_,数字 - -4.名称中不要用空格 - -5.名称中,不用sql语句的关键字 - -6.‘ “ `(反引号|飘号),用来标记名称 - -7.--注释,#注释内容,/* */多行注释,(ctel+/) - -8.数值直接写,不用符号包裹,字符串和时间数型用单引号包裹 - -### 数据类型 - -1.约束类型 - -2.规范数据空间的占用(内存) - -## 类型 - -#### 数值型 小数+整数 - -1.整形 int(M)这里的M不是限制长度,单独使用毫无意义,配合zerofill使用(补0) - -2.浮点 float(M,N) double(M,N) M表示限制整数+小数只能存放M长度,N限制小数的长度。如果小数的部分超过了N,会自动截断,并四舍五入。 - -3.定点 decimal(M,N) 默认(10,0),其他同上 - -#### 字符型 - -1.固定长度的 char 默认是1,最大是255 - -2.可变长度的 varchar(M) 这里的M不可缺省 - -#### 时间类型 - -1.data 年月日 - -2.time 时分秒 - -3.year 年 - -4.datatime - -5.timestamp 时间戳 - -#### enum枚举类型 - -类似单选框中的选项,只能选一个。 enum(1,2,3,4,5) - -#### set集合类型 - -类似多选框,可以选0个或是多个,但也只能选里面有的。set(1,2,3,4,5) - -### #一些数据库的属性 - -1.unsigned 无符号的,表示正数不能负数 - -2.null 允许为空。not null 不允许为空。 - -3.default 默认值 - -4.auto_increment 自增 - -## # DDL - -创建数据库 - -```MYSQL -create database 数据库名 charset 字符集; -``` - -查看所有数据库 - -```mysql -show databases; -``` - -查看数据库的定义语句 - -```mysql -show create database -``` - -修改数据库编码 - -```mysql -#修改数据库字符集和校对规则 -ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称 COLLATE 字符集对应校对规则; -``` - -删除数据库 - -```mysql -drop database 数据库名; -``` - -使用数据库 - -```mysql -use 数据库名; -``` - -查看数据库中的所有表格 - -```mysql -use 数据库名; -show tables; -或 -show tables from 数据库名; -``` - -创建表格 - -```mysql -create table 数据表名称( - 字段名 数据类型, - 字段名 数据类型 - ... -); -``` - -查看表的定义信息 - -```mysql -show create table 表名称; -``` - -查看表结构 - -```mysql -desc 表名称; -``` - -修改表名称 - -```mysql -alter table 旧表名 rename 【to】 新表名; -rename table 旧表名称 to 新表名称; -``` - -删除表格 - -```mysql -drop table 表名称; -``` - -删除字段 - -```mysql -alter table 表名称 drop 【column】 字段名称; -``` - -增加字段 - -```mysql -alter table 表名称 add 【column】 字段名称 数据类型; -alter table 表名称 add 【column】 字段名称 数据类型 first; -alter table 表名称 add 【column】 字段名称 数据类型 after 另一个字段; -``` - -修改字段的数据类型 - -```mysql -alter table 表名称 modify 【column】 字段名称 新的数据类型; -``` - -修改字段名称 - -```mysql -alter table 表名称 change 【column】 旧字段名称 新的字段名称 新的数据类型; -``` - -修改字段位置 - -```mysql -alter table 表名称 modify 【column】 字段名称 数据类型 first; -alter table 表名称 modify 【column】 字段名称 数据类型 after 另一个字段; -``` - -# DML - -添加一条记录到表中 - -```mysql -insert into 表名称 values(值列表);#值列表中的值的顺序、类型、个数必须与表结构一一对应 - -insert into 表名称 (字段列表) values(值列表); -``` - -添加多条记录到表中 - -```mysql -insert into 表名称 values(值列表),(值列表),(值列表); #值列表中的值的顺序、类型、个数必须与表结构一一对应 - -insert into 表名称 (字段列表) values(值列表),(值列表),(值列表); -``` - -修改所有行 - -```mysql -update 表名称 set 字段名 = 值, 字段名 = 值; #给所有行修改 -``` - -修改部分行 - -```mysql -update 表名称 set 字段名 = 值, 字段名 = 值 where 条件; #给满足条件的行修改 -``` - -删除部分行的数据 - -```mysql -delete from 表名称 where 条件; -``` - -删除整张表的数据,表结构留下 - -```mysql -delete from 表名称; -``` - -截断表,清空表中的数据,只留有表结构 - -```mysql -truncate 表名称; -``` - -## 约束 - -非空约束: - -~~~mysql -not null; -~~~ - -默认约束: - -~~~mysql -default ‘内容’; -~~~ - -主键约束: - -~~~mysql -primary key; -~~~ - -唯一约束: - -~~~mysql -unique key; -~~~ - -自增约束: - -~~~mysql -auto-inck ement primary key; -~~~ - -自增约束给null和0时会自增,指定一个值时就是你指定的数 - diff --git "a/17 \345\221\250\345\257\214/20230219 mysql\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232.md" "b/17 \345\221\250\345\257\214/20230219 mysql\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index 24eb6d7ac5f1cc404c0c8be5cfc4612645113061..0000000000000000000000000000000000000000 --- "a/17 \345\221\250\345\257\214/20230219 mysql\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,272 +0,0 @@ --- ## 第1题 --- --- 1、创建数据库test01_market --- --- ~~~ MYSQL -CREATE DATABASE text01_market; -use text01_market; --- ~~~ --- --- 2、创建表格customers --- --- ~~~ mysql -CREATE TABLE customers( -c_num INT(11), -c_name VARCHAR(50), -c_contact varchar(50), -c_city varchar(50), -c_birth DATE -); --- ~~~ --- --- --- -| -- | 字段名 | 数据类型 | -| ------------------------------------------------------------ | --------- | ----------- | -| -- | c_num | int(11) | -| -- | c_name | varchar(50) | -| -- | c_contact | varchar(50) | -| -- | c_city | varchar(50) | -| -- | c_birth | date | -| -- | | | -| -- **要求3:**将c_contact字段移动到c_birth字段后面 | | | -| -- | | | -| -- ~~~ mysql | | | -| ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth; | | | -| -- ~~~ | | | -| -- | | | -| -- **要求4:**将c_name字段数据类型改为 varchar(70) | | | -| -- | | | -| -- ~~~ mysql | | | -| ALTER TABLE customers MODIFY c_name VARCHAR(70); | | | -| -- ~~~ | | | -| -- | | | -| -- **要求5:**将c_contact字段改名为c_phone | | | -| -- | | | -| -- ~~~ mysql | | | -| ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); | | | -| -- ~~~ | | | -| -- | | | -| -- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) | | | -| -- | | | -| -- ~~~ mysql | | | -| ALTER TABLE customers ADD c_gender CHAR(1) AFTER c_name; | | | -| -- ~~~ | | | -| -- | | | -| -- **要求7:**将表名改为customers_info | | | -| -- | | | -| -- ~~~ mysql | | | -| ALTER TABLE customers RENAME customers_info; | | | -| -- ~~~ | | | -| -- | | | -| -- **要求8:**删除字段c_city | | | -| -- | | | -| -- ```mysql | | | -| ALTER TABLE customers_info DROP c_city; | | | -| -- ``` | | | -| -- | | | -| -- ## 第2题 | | | -| -- | | | -| -- 1、创建数据库test02_library | | | -| -- | | | -| -- ~~~ mysql | | | -| CREATE DATABASE text02_library; | | | -| use text02_library; | | | -| -- ~~~ | | | -| -- | | | -| -- 2、创建表格books | | | -| -- | | | -| -- ~~~ mysql | | | -| CREATE TABLE books( | | | -| b_id int(11), | | | -| b_name VARCHAR(50), | | | -| `authors` VARCHAR(100), | | | -| price FLOAT, | | | -| pubdate year, | | | -| note VARCHAR(100), | | | -| num INT(11) | | | -| ); | | | -| -- ~~~ | | | -| -- | | | -| -- | | | -| -- | | | -| -- | 字段名 | 字段说明 | -| -- | ------- | -------- | -| -- | b_id | 书编号 | -| -- | b_name | 书名 | -| -- | authors | 作者 | -| -- | price | 价格 | -| -- | pubdate | 出版日期 | -| -- | note | 说明 | -| -- | num | 库存 | -| -- | | | -| -- 3、向books表中插入记录 | | | - --- 1) 指定所有字段名称插入第一条记录 -INSERT INTO books(b_id,b_name,authors,price,pubdate,note,num) VALUES (88,'ahdj','fafa',9.9,2018,'fawf',88); --- 2)不指定字段名称插入第二记录 -INSERT INTO books VALUES (99,'awda','dads',9.9,2018,'jjjj',66); --- 3)同时插入多条记录(剩下的所有记录) -INSERT INTO books VALUES (99,'awda','dads',9.9,2018,'jjjj',66),(88,'ahdj','fafa',9.9,2018,'fawf',88),(99,'awda','dads',9.9,2018,'jjjj',66); -| -- | b_id | b_name | authors | price | pubdate | note | num | -| ------------------------------------------------------------ | -------------- | ------------------- | --------------- | -------------- | -------- | -------------- | --------------------------- | -| -- | 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| -- | 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| -- | 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| -- | 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| -- | 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| -- | 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| -- | 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | -| -- | | | | | | | | -| -- 4、将小说类型(novel)的书的价格都增加5。 | | | | | | | | -| UPDATE books set price = price+5 where note='jjjj'; | | | | | | | | -| -- 5、将名称为EmmaT的书的价格改为40。 | | | | | | | | -| UPDATE books set price = 40 WHERE b_name='awda'; | | | | | | | | -| -- 6、删除库存为0的记录 | | | | | | | | -| DELETE FROM books where num=88; | | | | | | | | -| -- ```mysql | | | | | | | | -| -- | | | | | | | | -| -- ``` | | | | | | | | -| -- | | | | | | | | -| -- | | | | | | | | -| -- | | | | | | | | -| -- ## 第3题 | | | | | | | | -| -- | | | | | | | | -| -- 1、创建数据库test03_bookstore | | | | | | | | -| CREATE DATABASE test03_bookstore; | | | | | | | | -| use test03_bookstore; | | | | | | | | -| -- 2、创建book表 | | | | | | | | -| create TABLE book( | | | | | | | | -| id int(11), | | | | | | | | -| title varchar(100), | | | | | | | | -| author varchar(100), | | | | | | | | -| price DOUBLE(11,2), | | | | | | | | -| sales int(11), | | | | | | | | -| stock int(11), | | | | | | | | -| img_path varchar(100) | | | | | | | | -| ); | | | | | | | | -| alter DATABASE test03_bookstore charset utf8; | | | | | | | | -| ALTER TABLE book charset utf8; | | | | | | | | -| show CREATE TABLE book; | | | | | | | | -| -- ```mysql | | | | | | | | -| -- +----------+--------------+------+-----+---------+----------------+ | | | | | | | | -| -- | Field | Type | Null | Key | Default | Extra | | -| -- +----------+--------------+------+-----+---------+----------------+ | | | | | | | | -| -- | id | int(11) | NO | PRI | NULL | auto_increment | | -| -- | title | varchar(100) | NO | | NULL | | | -| -- | author | varchar(100) | NO | | NULL | | | -| -- | price | double(11,2) | NO | | NULL | | | -| -- | sales | int(11) | NO | | NULL | | | -| -- | stock | int(11) | NO | | NULL | | | -| -- | img_path | varchar(100) | NO | | NULL | | | -| -- +----------+--------------+------+-----+---------+----------------+ | | | | | | | | -| -- ``` | | | | | | | | -| -- | | | | | | | | -| -- 尝试添加部分模拟数据,参考示例如下: | | | | | | | | -| INSERT into book VALUES (1,'解忧杂货店','东野圭吾',27.20,102,98,'upload/books/解忧杂货店.jpg'),(2,'边城','沈从文',23.00,102,98'upload/books/边城.jpg'); | | | | | | | | -| -- ```mysql | | | | | | | | -| -- +----+-------------+------------+-------+-------+-------+----------------------------+ | | | | | | | | -| -- | id | title | author | price | sales | stock | img_path | -| -- +----+-------------+------------+-------+-------+-------+-----------------------------+ | | | | | | | | -| -- | 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | -| -- | 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | -| -- +----+---------------+------------+-------+-------+-------+----------------------------+ | | | | | | | | -| -- ``` | | | | | | | | -| -- | | | | | | | | -| -- 3、创建用户表users,并插入数据 | | | | | | | | -| create table users ( | | | | | | | | -| id int(11), | | | | | | | | -| username varchar(100), | | | | | | | | -| password varchar(100), | | | | | | | | -| email varchar(100) | | | | | | | | -| ); | | | | | | | | -| -- ```mysql | | | | | | | | -| -- +----------+--------------+------+-----+---------+----------------+ | | | | | | | | -| -- | Field | Type | Null | Key | Default | Extra | | -| -- +----------+--------------+------+-----+---------+----------------+ | | | | | | | | -| -- | id | int(11) | NO | PRI | NULL | auto_increment | | -| -- | username | varchar(100) | NO | UNI | NULL | | | -| -- | password | varchar(100) | NO | | NULL | | | -| -- | email | varchar(100) | YES | | NULL | | | -| -- +----------+--------------+------+-----+---------+----------------+ | | | | | | | | -| -- ``` | | | | | | | | -| -- | | | | | | | | -| -- 尝试添加部分模拟数据,参考示例如下: | | | | | | | | -| insert into users VALUES (1,'admin','112233','admin@mxdx.com'); | | | | | | | | -| -- ```mysql | | | | | | | | -| -- +----+----------+----------------------------------+--------------------+ | | | | | | | | -| -- | id | username | password | email | | | | -| -- +----+----------+----------------------------------+--------------------+ | | | | | | | | -| -- | 1 | admin | 112233 | admin@mxdx.com | | | | -| -- +----+----------+----------------------------------+--------------------+ | | | | | | | | -| -- ``` | | | | | | | | -| -- | | | | | | | | -| -- 4、创建订单表orders | | | | | | | | -| create table orders( | | | | | | | | -| id VARCHAR(100), | | | | | | | | -| order_time datetime, | | | | | | | | -| total_count int(11), | | | | | | | | -| total_amount double(11,2), | | | | | | | | -| state int(11), | | | | | | | | -| user_id int(11) | | | | | | | | -| ); | | | | | | | | -| -- ```mysql | | | | | | | | -| -- +--------------+--------------+------+-----+---------+-------+ | | | | | | | | -| -- | Field | Type | Null | Key | Default | Extra | | -| -- +--------------+--------------+------+-----+---------+-------+ | | | | | | | | -| -- | id | varchar(100) | NO | PRI | NULL | | | -| -- | order_time | datetime | NO | | NULL | | | -| -- | total_count | int(11) | NO | | NULL | | | -| -- | total_amount | double(11,2) | NO | | NULL | | | -| -- | state | int(11) | NO | | NULL | | | -| -- | user_id | int(11) | NO | MUL | NULL | | | -| -- +--------------+--------------+------+-----+---------+-------+ | | | | | | | | -| -- ``` | | | | | | | | -| -- | | | | | | | | -| -- 尝试添加部分模拟数据,参考示例如下: | | | | | | | | -| insert into orders VALUES ('15294258455691','2018-06-20 00:30:45',2,50.20,0,1); | | | | | | | | -| -- ```mysql | | | | | | | | -| -- +----------------+---------------------+-------------+--------------+-------+---------+ | | | | | | | | -| -- | id | order_time | total_count | total_amount | state | user_id | | -| -- +----------------+---------------------+-------------+--------------+-------+---------+ | | | | | | | | -| -- | 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | | -| -- +----------------+---------------------+-------------+--------------+-------+---------+ | | | | | | | | -| -- ``` | | | | | | | | -| -- | | | | | | | | -| -- 5、创建订单明细表order_items | | | | | | | | -| create table order_items( | | | | | | | | -| id int(11), | | | | | | | | -| count int(11), | | | | | | | | -| amount DOUBLE(11,2), | | | | | | | | -| title varchar(100), | | | | | | | | -| author varchar(100), | | | | | | | | -| price DOUBLE(11,2), | | | | | | | | -| img_path varchar(100), | | | | | | | | -| order_id varchar(100) | | | | | | | | -| ); | | | | | | | | -| -- ```mysql | | | | | | | | -| -- +----------+--------------+------+-----+---------+----------------+ | | | | | | | | -| -- | Field | Type | Null | Key | Default | Extra | | -| -- +----------+--------------+------+-----+---------+----------------+ | | | | | | | | -| -- | id | int(11) | NO | PRI | NULL | auto_increment | | -| -- | count | int(11) | NO | | NULL | | | -| -- | amount | double(11,2) | NO | | NULL | | | -| -- | title | varchar(100) | NO | | NULL | | | -| -- | author | varchar(100) | NO | | NULL | | | -| -- | price | double(11,2) | NO | | NULL | | | -| -- | img_path | varchar(100) | NO | | NULL | | | -| -- | order_id | varchar(100) | NO | MUL | NULL | | | -| -- +----------+--------------+------+-----+---------+----------------+ | | | | | | | | -| -- ``` | | | | | | | | -| -- | | | | | | | | -| -- 尝试添加部分模拟数据,参考示例如下: | | | | | | | | -| INSERT into order_items VALUES (1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg','15294258455691'),(2,1,23.00,'边城','沈从文',27.20,'static/img/default.jpg','15294258455691'); | | | | | | | | -| -- ```mysql | | | | | | | | -| -- +----+-------+--------+---------+---------+-------+----------------+----------------+ | | | | | | | | -| -- | id | count | amount | title | author | price | img_path | -| -- +----+-------+--------+------------+----------+-------+----------------+----------------+ | | | | | | | | -| -- | 1 | 1 | 27.20 | 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg | -| -- | 2 | 1 | 23.00 | 边城 | 沈从文 | 23.00 | static/img/default.jpg | -| -- +----+-------+--------+------------+----------+-------+------------+----------------+ | | | | | | | | -| -- ``` | | | | | | | | -| -- | | | | | | | | \ No newline at end of file diff --git "a/17 \345\221\250\345\257\214/20230222\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.md" "b/17 \345\221\250\345\257\214/20230222\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index b6a8946d186611f25ce604f650bf54471e878e9d..0000000000000000000000000000000000000000 --- "a/17 \345\221\250\345\257\214/20230222\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,313 +0,0 @@ -## 第1题 - -1、创建数据库test01_company - -create database test01_company charset utf8; -use test01_company; - -2、创建表格offices - -create table offices( -officecode int, -city varchar(30), -address varchar(50), -county varchar(50), -postalcoda varchar(25) -); - -| 字段名 | 数据类型 | -| ---------- | ----------- | -| officeCode | int | -| city | varchar(30) | -| address | varchar(50) | -| country | varchar(50) | -| postalCode | varchar(25) | - -3、创建表格employees - -create table employees( -empnum int, -lastname varchar(50), -firstname varchar(50), -mobile varchar(25), -code int, -jobtitle varchar(50), -birth date, -note varchar(255), -sex varchar(5) -); - -| 字段名 | 数据类型 | -| ------------- | ---------------------------- | -| empNum | int(11) | -| lastName | varchar(50) | -| firstName | varchar(50) | -| mobile | varchar(25) | -| code | int | -| jobTitle | varchar(50) | -| birth | date | -| Note | varchar(255) | -| Sex | varchar(5) | - -**要求4:**将表employees的mobile字段修改到code字段后面。 - -ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER `code` ; - -**要求5:**将表employees的birth字段改名为birthday; - -ALTER TABLE employees CHANGE mobile birthday date; - -**要求6:**修改sex字段,数据类型为char(1)。 - -ALTER TABLE employees MODIFY sex char(1); - -**要求7:**删除字段note; - -ALTER TABLE employees DROP note; - -**要求8:**增加字段名favoriate_activity,数据类型为varchar(100); - -ALTER TABLE employees add favoriate_activity VARCHAR(100); - -**要求9:**将表employees的名称修改为 employees_info - -```mysql -ALTER TABLE employees RENAME employees_info; -``` - - - -## 第2题 - -1、创建数据库test02db - -CREATE database text02db; - -2、创建表格pet - -CREATE TABLE pet( -`name` varchar(20), -`owner` varchar(20), -species varchar(20), -sex char(1), -birth year, -death year -); - -| 字段名 | 字段说明 | 数据类型 | -| ------- | -------- | ----------- | -| name | 宠物名称 | varchar(20) | -| owner | 宠物主人 | varchar(20) | -| species | 种类 | varchar(20) | -| sex | 性别 | char(1) | -| birth | 出生日期 | year | -| death | 死亡日期 | year | - -3、添加记录 - -INSERT into pet VALUES('Fluffy','harold','Cat','f',2003,2010),('Claws','gwen','Cat','m',2004,NULL),('Buffy',NULL,'Dog','f',2009,NULL),('Fang','benny','Dog','m',2000,NULL),('bowser','diane','Dog','m',2003,2009),('Chirpy',NULL,'Bird','f',2008,NULL); - -| name | owner | species | sex | birth | death | -| ------ | ------ | ------- | ---- | ----- | ----- | -| Fluffy | harold | Cat | f | 2003 | 2010 | -| Claws | gwen | Cat | m | 2004 | | -| Buffy | | Dog | f | 2009 | | -| Fang | benny | Dog | m | 2000 | | -| bowser | diane | Dog | m | 2003 | 2009 | -| Chirpy | | Bird | f | 2008 | | - -4、 添加字段主人的生日owner_birth。 - -ALTER TABLE pet add owner_birth date; - -5、 将名称为Claws的猫的主人改为kevin - -UPDATE pet SET `owner`='kevin' WHERE `name`='Claws'; - -6、 将没有死的狗的主人改为duck - -update pet set `owner`='duck' WHERE `death`IS NULL; - -7、 查询没有主人的宠物的名字; - -SELECT `name` FROM pet where `owner` IS null; - -8、 查询已经死了的cat的姓名,主人,以及去世时间; - -select `name`,`owner`,death from pet WHERE species='Cat'; - -9、 删除已经死亡的狗 - -delete from pet where species='Dog' and death='2009'; - -10、查询所有宠物信息 - -```mysql - -select * from pet; -``` - -## 第3题 - -1、创建数据库:test03_company - -```sql -create database test03_company charset utf8; -``` - -2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - -A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - -```mysql -use test03_company ; -create table department( - depid int primary key auto_increment, - depname char(10) not null unique key, - deinfo varchar(200) -) -``` - -B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - -* ​ 雇员编号为主键; -* ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); -* ​ 性别默认为男; - -```mysql -create table employee ( - empid int primary key auto_increment, - name varchar(10) not null, - sex enum('男','女') not null default '男', - title varchar(10), - birthday date, - depid int foreign key references department(depid) -) -``` - -C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - -3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) - -create table salary( -empid int primary key, -basesalary double, -titlesalary double, -deduction double, -foreign key(empid) references employee(empid) - -); - -4、添加数据如下: - -部门表: - -INSERT INTO department(depid,depname,deinfo) VALUES (111,'生产部',NULL),(222,'销售部',NULL),(333,'人事部','人力资源管理'); - -| 部门编号 | 部门名称 | 部门简介 | -| -------- | -------- | ------------ | -| 111 | 生产部 | Null | -| 222 | 销售部 | Null | -| 333 | 人事部 | 人力资源管理 | - - 雇员表: - -INSERT into employee(empid,`name`,sex,title,birthday,depid) VALUES(1001,'张三','男','高级工程师','1975-1-1',111),(1002,'李四','女','助工','1985-1-1',111),(1003,'王五','男','工程师','1978-11-11',222),(1004,'张六','男','工程师','1999-1-1',222); - -| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | -| -------- | ---- | ---- | ---------- | ---------- | ------------ | -| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | -| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | -| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | -| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | - - 工资表: - -INSERT INTO salary(empid,basesalary,titlesalary,deduction) VALUES(1001,2200,1100,200),(1002,1200,200,NULL),(1003,2990,700,200),(1004,1950,700,150); - -| 雇员编号 | 基本工资 | 职务工资 | 扣除 | -| -------- | -------- | -------- | ---- | -| 1001 | 2200 | 1100 | 200 | -| 1002 | 1200 | 200 | NULL | -| 1003 | 2900 | 700 | 200 | -| 1004 | 1950 | 700 | 150 | - - - -## 第4题 - -1、创建一个数据库:test04_school - -CREATE DATABASE text04_scgool; - -2、创建如下表格 - -表1 Department表的定义 - -CREATE TABLE Department( -DepNo int(10) PRIMARY KEY NOT NULL UNIQUE, -DepName VARCHAR(20) NOT NULL, -DepNote VARCHAR(50) -); - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | -| DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | -| DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | - -表2 Teacher表的定义 - - create table Teacher( -Number int primary key not null unique, -`Name` varchar(30) not null, -Sex VARCHAR(4), Birth date, -DepNo int, -Salary float, -Address VARCHAR(100), -foreign key(DepNo) references Department(DepNo) -); - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| Number | 教工号 | int | 是 | 否 | 是 | 是 | -| Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | -| Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | -| Birth | 出生日期 | date | 否 | 否 | 否 | 否 | -| DepNo | 部门号 | int | 否 | 是 | 否 | 否 | -| Salary | 工资 | float | 否 | 否 | 否 | 否 | -| Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | - -3、添加记录 - -insert into Department VALUES (601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'),(603,'艺术设计系','广告艺术设计等专业'),(604,'管理工程系','连锁经营管理等专业'); - - - -insert into Teacher VALUES (2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'),(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'),(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'),(2004,'James','女','1980-10-20',602,3500,'四川省成都市'),(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); - -| **DepNo** | **DepName** | **DepNote** | -| --------- | ----------- | ------------------ | -| 601 | 软件技术系 | 软件技术等专业 | -| 602 | 网络技术系 | 多媒体技术等专业 | -| 603 | 艺术设计系 | 广告艺术设计等专业 | -| 604 | 管理工程系 | 连锁经营管理等专业 | - -| **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | -| ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | -| 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | -| 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | -| 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | -| 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | -| 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | - -4、用SELECT语句查询Teacher表的所有记录。 - -```mysql -select * FROM Teacher; -``` - - - - - diff --git "a/17 \345\221\250\345\257\214/20230223\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232\345\222\214\347\254\224\350\256\260.md" "b/17 \345\221\250\345\257\214/20230223\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232\345\222\214\347\254\224\350\256\260.md" deleted file mode 100644 index 8667afe5cc7d7e4bcfb84af299542d56dce63570..0000000000000000000000000000000000000000 --- "a/17 \345\221\250\345\257\214/20230223\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232\345\222\214\347\254\224\350\256\260.md" +++ /dev/null @@ -1,267 +0,0 @@ -## DQL - -结果去重 - -### distinct - -只能放在第一个字段前面,一次只支持一列字段 - -~~~ -select distinct 字段列表 from 表名称 where 条件 -~~~ - -### 别名 - -select 字段 别名,字段 别名 from 表名 别名; - -列的别名有空格时,加双引号,没有空格双引号可加可不加 - -表的别名不用加双引号,表的别名不能有空格 - -### 模糊查询 - -### like - -%;代表任意个字符 - -—;代表一个字符,两个下划线就是两个字符 - -### 逻辑查询 - -### xor - -两者只能满足其中一个,不能同时满足,不能同时不满足。 - -## 运算符 - -div (保留整数部分) - -安全等于 <=> 可以用于null的运算 - -模,% (取余) - -不等于,!= 或 <> 不能用于null判断 - -## 区间 - -区间范围 - -~~~mysql -between x and y -~~~ - -不在这区间 - -~~~sql -not between x and y -~~~ - -集合范围 - -~~~sql -in (x,y,z),有其中一个就行 -not in(x,y,z),不在这其中 -~~~ - - - - - -## 第1题:员工表 - -```mysql -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - - - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - -**要求1:**查询出薪资在12000~13000之间的员工信息。 - -~~~sql -select * from employee where salary between 12000 and 13000; -~~~ - - - -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -~~~sql -select id,name,addr from employee where name like "刘%"; -~~~ - -**要求3:**将“李四”的家庭住址改为“广东韶关” - -~~~sql -update employee set addr = '广东韶关' where name = '李四'; -~~~ - - - -**要求4:**查询出名字中带“小”的员工 - -~~~SQL -select * from employee where name like "%小%" -~~~ - - - -**要求5:**查询出薪资高于11000的男员工信息 - -~~~SQL -select * from employee where salary > 11000 and sex = '男'; -~~~ - - - -**要求6:**查询没有登记电话号码的员工 - -~~~SQL -select * from employee where tel is null; -~~~ - - - -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -~~~SQL -select * from employee where salary > 12000 and sex = '男' or addr in('广东深圳','广东广州') and sex = '男'; -~~~ - - - -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - -```mysql -select name '姓名',salary*12 年薪 from employee; -``` - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -``` - -**要求1:** 查询大国 的国家名称、人口和面积。 - -~~~SQL -select name,area,population from countries_info where population >= 25000000 or -area >= 3000000; -~~~ - - - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) - -- 人口至少为 2500 万(即 25000000) - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -~~~SQL -select * from countries_info where continent = 'Asia'; -~~~ - - - -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -~~~SQL -select * from countries_info where area < 10000 and population < 100000; -~~~ - - - -**要求4:**查询国家名字中包含“o“字母的国家信息 - -~~~SQL -select * from countries_info where continent like "%o%"; -~~~ - - - -**要求5:**查询GDP值超过10000000000的国家信息 - -~~~SQL -select * from countries_info where gdp > 10000000000; -~~~ - - - -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -~~~SQL -select name,population,gdp,gdp/population 人均贡献GDP值 from countries_info; -~~~ - - - -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - -~~~SQL -select * from countries_info where gdp/population < 1000; -~~~ - - - -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -```mysql -select name,area,population,area/population 人均国土面积值 from countries_info; -``` - diff --git "a/17 \345\221\250\345\257\214/20230307 \347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.md" "b/17 \345\221\250\345\257\214/20230307 \347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index 1d741f825856a30923d13542da695e564dafe0ef..0000000000000000000000000000000000000000 --- "a/17 \345\221\250\345\257\214/20230307 \347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,110 +0,0 @@ -### 笔记 - -##### 子查询 - -- 嵌套在其他SQL语句中的查询语句。 -- 子查询通常先运行,所以要用()包裹起来。 -- 子查询的运行结果,可以作为其他语句的条件,数据源等。 - -##### 子查询分三种形式 - - select 1 from 2 where 3 - -1.放在select后面 - -2.放在where/having后面 - -3.放在from后面,子查询当做一个临时的表使用,必须要给别名。 - -##### where或having后的子查询,其子查询的结果有三种形式 - -1.单列单个值,可以直接使用比较运算符 - -2.单列多个值,可以使用 in ,not in 进行比较 - -3.单列多个值,可以使用比较运算符,搭配any,all,等关键字与查询结果进行比较 - -##### 子查询结果是单列,可以放在select参与运算,或者是作为字段,也可以放在where / having后当条件。 - -##### 子查询结果是多列,多个值,只能放在from后面当临时表使用,并且必须取别名。 - -### 作业 - -~~~ mysql -create database text1 charset utf8; -use text1; -create table stuinfo( -stuNO varchar(10) primary key, -stuName varchar(10), -stuSex varchar(5), -stuAge double, -stuAddress varchar(20), -stuSeat int auto_increment unique -); -create table stuExam( -examNo int primary key, -stuNO varchar(10), -writtenExam varchar(10), -labExam double, -foreign key(stuNo) references stuinfo(stuNo) -); -create table stuMarks( -examNO int, -stuID varchar(10), -score double, -foreign key(examNO) references stuExam(examNO) -); -insert into stuinfo values -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'湖北武汉',2), -('s2503','马文才','男',18,'湖南长沙',3), -('s2504','欧阳俊雄','女',21,'湖北武汉',4), -('s2505','梅超风','男',16,'湖北武汉',5), -('s2506','陈旋风','男',19,'美国硅谷',6); -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); -insert into stuMarks values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); --- 1.查询出年龄比班上平均年龄大的学生的信息 -select * from stuinfo where stuAge>(selectavg(stuAge) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -select t.stuNO,t.stuName,t.stuAge,max(score) from stumarks s left join stuinfo t on s.stuID=t.stuNO group by s.stuID; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -select avg(writtenExam+labExam) from stuexam right join stuinfo on stuexam.stuNO=stuinfo.stuNO GROUP BY stuexam.stuNO; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) --- 普通查询 -select * from stuinfo where stusex='男' and stuage>=20; --- 子查询 -select * from stuinfo where stuage=(select stuage from stuinfo where stusex='男' and stuage>=20); --- 5.查询出年龄比所有男生年龄都大的女生的信息 -select stuSex,max(stuAge) from stuinfo where stuSex='女' and stuAge> all(select stuAge from stuinfo where stuSex ='男'); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -select t.stuNO,t.stuName,t.stuAge,max(score) from stumarks s left join stuinfo t on s.stuID=t.stuNO group by s.stuID; --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select * from stuinfo a left join stumarks c on a.stuNO=c.stuID where stuID is NULL; --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select * from stuinfo a left join stumarks c on a.stuNO=c.stuID where a.stuNO not in (select stuID from stumarks group by stuID); --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where score>90; --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where score>(select avg(score) from stumarks) --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) -select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where stumarks.score > any(select score from stumarks where stumarks.stuID='s2501' ) and stuinfo.stuName != '张秋利' --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) -select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where stumarks.score > any(select score from stumarks where stumarks.stuID='s2501' ) and stuinfo.stuName != '张秋利' --- 13.查询班上比所有男生年龄都要大的女生的信息 -select stuSex,max(stuAge) from stuinfo where stuSex='女' and stuAge> all(select stuAge from stuinfo where stuSex ='男'); --- 14.查询出只要比某个男生年龄大的女生的信息 -select * from stuinfo where stusex = '女' and stuage > (select min(stuage) from stuinfo where stusex = '男'); -~~~ - diff --git "a/18 \345\276\220\346\260\270\346\267\263/20230218 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" "b/18 \345\276\220\346\260\270\346\267\263/20230218 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" deleted file mode 100644 index 9e1f0534119469a9417155eca138233f28d9c702..0000000000000000000000000000000000000000 --- "a/18 \345\276\220\346\260\270\346\267\263/20230218 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" +++ /dev/null @@ -1,166 +0,0 @@ -## 第1题 - -1、创建数据库test01_market - -```MySQL -CREATE DATABASE test01_market; -``` - - -2、创建表格customers - -```mysql -USE test01_market; -``` - - - -```mysql -CREATE TABLE customers( -c_num int(11), -c_name VARCHAR(50), -c_conntact VARCHAR(50), -c_city VARCHAR(50), -c_birth date -); -``` - - - -| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date | - -**要求3:**将c_contact字段移动到c_birth字段后面 - -```mysql -ALTER TABLE customers MODIFY c_conntact VARCHAR(50) AFTER c_birth; -``` - - -**要求4:**将c_name字段数据类型改为 varchar(70) - -```mysql -ALTER TABLE customers MODIFY c_name VARCHAR(70); -``` - - -**要求5:**将c_contact字段改名为c_phone - -```mysql -ALTER TABLE customers_into CHANGE c_conntact c_phne VARCHAR(50); -``` - - -**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -```mysql -ALTER TABLE customers ADD c_gender CHAR(1) AFTER c_name; -``` - - -**要求7:**将表名改为customers_info - -```mysql -ALTER TABLE customers RENAME TO customers_into; -``` - -**要求8:**删除字段c_city - -```mysql -ALTER TABLE customers_into DROP c_city; -``` - -## 第2题 - -1、创建数据库test02_library - -```mysql -CREATE DATABASE test02_library; -``` - - -```mysql -use test02_library; -``` - -2、创建表格books - -```mysql -CREATE TABLE books( -b_id int(11), -b_name VARCHAR(50), -authors VARCHAR(100), -price FLOAT, -pubdate YEAR, -note VARCHAR(100), -num int(11) - ); -``` - - - -| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------- | -------- | ------------- | -------- | ---- | -| b_id | 书编号 | int(11) | 否 | 是 | -| b_name | 书名 | varchar(50) | 否 | 否 | -| authors | 作者 | varchar(100) | 否 | 否 | -| price | 价格 | float | 否 | 否 | -| pubdate | 出版日期 | year | 否 | 否 | -| note | 说明 | varchar(100) | 是 | 否 | -| num | 库存 | int(11) | 否 | 否 | - -3、向books表中插入记录 - -1) 指定所有字段名称插入第一条记录 - -```mysql -INSERT INTO books VALUES (1,'Tal of AAA','Dickes',23,1995,'novel',11); -``` - -2)不指定字段名称插入第二记录 - -```mysql -INSERT INTO books VALUES (2,'Emmat','Jane',23,1993,'joke',22); -``` - -3)同时插入多条记录(剩下的所有记录) - -```mysql -INSERT into books VALUES (3,'Story of jane','jane Tim',40,2001,'novel',0),(4,'Lovey Day','George Byron',20,2005,'novel',30),(5,'Old land','Honore Blade',30,2010,'Law',0),(6,'The Battle','Upton Sara',30,1999,'medicine',40),(7,'Rose Hood','Richaard haggard',28,2008,'cartoon',28); -``` - - - -| b_id | b_name | authors | price | pubdate | note | num | -| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -4、将小说类型(novel)的书的价格都增加5。 - -```mysql -UPDATE books set price=price+5 WHERE note='novel'; -``` - -5、将名称为EmmaT的书的价格改为40。 - -```mysql -UPDATE books set price=40 WHERE note='Emmat'; -``` - -6、删除库存为0的记录 - -```mysql -delete from books where num=0; -``` - diff --git "a/18 \345\276\220\346\260\270\346\267\263/20230222 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" "b/18 \345\276\220\346\260\270\346\267\263/20230222 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" deleted file mode 100644 index f7c076344cef694f393078a0474cc08cc2e552c2..0000000000000000000000000000000000000000 --- "a/18 \345\276\220\346\260\270\346\267\263/20230222 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" +++ /dev/null @@ -1,111 +0,0 @@ -```mysql - - - -CREATE DATABASE test01_company CHARSET utf8; -USE test01_company; -CREATE TABLE offices( - officeCode INT, - city VARCHAR(30), - address VARCHAR(50), - country VARCHAR(50), - postalCode VARCHAR(25) -); -CREATE TABLE employees( - empNum INT(11), - lastName VARCHAR(50), - firstName VARCHAR(50), - mobile VARCHAR(25), - code INT, - jobTitle VARCHAR(50), - birth date, - Note VARCHAR(255), - Sex VARCHAR(5) -); -ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER code; -ALTER TABLE employees CHANGE birth birthday DATE; -ALTER TABLE employees MODIFY sex CHAR(1); -ALTER TABLE employees DROP note; -ALTER TABLE employees ADD favoriate_activity VARCHAR(100); -ALTER TABLE employees RENAME employees_info; - - - -CREATE DATABASE test02db CHARSET utf8; -USE test02db; -CREATE TABLE pet( - name VARCHAR(20) , - owner VARCHAR(20) , - species VARCHAR(20), - sex CHAR(1) , - birth year, - death year -); -INSERT INTO pet VALUES ('Fluffy','harold','Cat','f','2003','2010'), ('Claws','gwen','Cat','m','2004',NULL), ('Butty',NULL,'Dog','f','2009',NULL), ('Fang','benny','Dog','m','2000',NULL), ('bowser','diane','Dog','m','2003','2009'), ('Chirpy',NULL,'Bird','f','2008',NULL); -ALTER TABLE pet ADD owner_birth DATE; -UPDATE pet SET owner='kevin' WHERE NAME='Claws'; -UPDATE pet SET owner='duck' WHERE species='dog' AND OWNER IS null; -SELECT*FROM pet WHERE OWNER IS null; -SELECT name,owner, death FROM pet WHERE species='cat' AND death IS NOT NULL; -DELETE FROM pet WHERE death is not null and species = 'Dog'; - - - - -CREATE DATABASE test03_company CHARSET utf8; -use test03_company; -create table department( - depid int primary KEY, - depname char(10) not null , - deinfo varchar(200) -); -CREATE TABLE employee ( -empid int PRIMARY KEY, -name VARCHAR(50), -sex enum('男','女') not null DEFAULT '男', -title VARCHAR(10), -birthday DATE, -depid int,FOREIGN key employee(depid) REFERENCES department(depid) on update cascade on delete set null -); -CREATE TABLE salary ( -empid INT PRIMARY KEY, -basesalary int, -titlesalary int , -deduction INT -); -ALTER TABLE salary ADD FOREIGN KEY(empid) REFERENCES employee(empid) ON UPDATE CASCADE ON DELETE CASCADE; -INSERT INTO department VALUES(111,'生产部',NULL),(222,'销售部',NULL),(333,'人事部','人力资源管理'); -INSERT INTO employee VALUES(1001,'张三','男','高级工程师','1975-1-1',111),(1002,'李四','女','助工','1985-1-1',111),(1003,'王五','男','工程师','1978-11-11',222),(1004,'张六','男','工程师','1999-1-1',222); -INSERT INTO salary VALUES( 1001 , 2200 , 1100 , 200 ),( 1002 ,1200,200,NULL),(1003,2900,700,200),(1004,1950,700,150); - - - -CREATE DATABASE test04_school CHARSET utf8; -use test04_school; -CREATE TABLE Department( -DepNo int(10) PRIMARY KEY not null UNIQUE key, -DepName VARCHAR(20) NOT null, -DepNote Varchar(50) -); -CREATE TABLE Teacher( -Number int PRIMARY KEY NOT null unique key, -Name VARCHAR(30) not null, -sex VARCHAR(4), -birth date, -DepNo int, FOREIGN KEY teacher(depno) REFERENCES Department(DepNo), -Salary FLOAT, -Address VARCHAR(100) -); -INSERT INTO Department VALUES (601,'软件设计系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'),(603,'艺术设计系','广告艺术设计等专业'),(604,'管理工程系','连锁经营管理等专业'); -INSERT INTO Teacher VALUES(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'),(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'),(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'),(2004,'James','女','1980-10-20',602,3500,'四川省成都市'),(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); -SELECT*FROM teacher; -``` - -查询全部要用 select*from 库名 - -查询部分要用 select 需要查询的信息 from 库名 - -如果查询要两个条件 可以在后面加 and 若值为空 可以填 信息 is null - -主键 primary key 外键 foreign key 库名(表名)reference 其他库名(对方主键)、 - diff --git "a/18 \345\276\220\346\260\270\346\267\263/20230223 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" "b/18 \345\276\220\346\260\270\346\267\263/20230223 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" deleted file mode 100644 index 087ac9301d9ca0267d66fc55ea8c2cdc612930e5..0000000000000000000000000000000000000000 --- "a/18 \345\276\220\346\260\270\346\267\263/20230223 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" +++ /dev/null @@ -1,84 +0,0 @@ -```sql -CREATE DATABASE goodbye CHARSET utf8; -USE goodbye; -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -SELECT*FROM employee where salary>12000 and salary<13000; -SELECT NAME FROM employee WHERE NAME LIKE '刘%'; -UPDATE employee SET addr='广东韶关' WHERE name='李四'; -SELECT NAME FROM employee WHERE NAME LIKE '%小%'; -SELECT*FROM employee WHERE salary>11000 AND sex='男'; -SELECT*FROM employee where tel is null; -SELECT*FROM employee WHERE (salary>12000 AND sex='男' ) OR (addr='广州' AND ADDr='广东深圳'); -SELECT name ,salary FROM employee; -``` - - - -```sql -CREATE DATABASE sever CHARSET utf8; -use sever; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -SELECT name, area ,population FROM countries_info WHERE area>=3000000 or population>=25000000; -SELECT*FROM countries_info WHERE continent='asia'; -SELECT*FROM countries_info WHERE area<=10000 AND population<=100000; -SELECT*FROM countries_info WHERE NAME LIKE '%o%'; -SELECT*FROM countries_info WHERE gdp>10000000000; -SELECT name 国家,population 人口,gdp gdp值,gdp/population 人均gdp值 FROM countries_info ; -SELECt *,gdp/population 人均gdp值 from countries_info WHERE gdp/population<1000; -SELECT name 国家名,area 面积,population 人口,area/population 人均国土面积值 FROM countries_info; -``` - -区间范围:between x and y - not between x and y -集合范围:in (x,x,x) - not in(x,x,x) - between ... and ... 结果包含两端的边界 - -大于:> -小于:< -大于等于:>= -小于等于:>= -等于:= 不能用于null判断 -不等于:!= 或 <> 不能用于null判断 -判断是null 用 is null 或 用 <=> null -判断不是null is not null - -加:+ - 在MySQL +就是求和,没有字符串拼接 -减:- -乘:* -除:/ div(只保留整数部分) - div:两个数相除只保留整数部分 - /:数学中的除 -模:% mod - - - diff --git "a/18 \345\276\220\346\260\270\346\267\263/20230301 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" "b/18 \345\276\220\346\260\270\346\267\263/20230301 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" deleted file mode 100644 index f9855c2f9aa4195b99eabc15310e4793a9de4047..0000000000000000000000000000000000000000 --- "a/18 \345\276\220\346\260\270\346\267\263/20230301 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" +++ /dev/null @@ -1,141 +0,0 @@ -CREATE DATABASE school charset utf8; -use school; -CREATE TABLE student( -sno VARCHAR(20) not null PRIMARY KEY, -sname VARCHAR(20) not null, -ssex VARCHAR(20) not null, -sbirthday datetime, -class VARCHAR (20) -); - -CREATE TABLE Course( -cno VARCHAR (20) not NULL PRIMARY KEY, -cname VARCHAR (20) not null , -tno VARCHAR(20) not null, -FOREIGN KEY (tno) REFERENCES teacher(tno) -); -set FOREIGN_key_checks=0; - -CREATE TABLE score( -sno VARCHAR(20) not null ,FOREIGn key (sno) REFERENCES student(sno), -cno VARCHAR (20) not null ,FOREIGN KEY (cno) REFERENCES course(cno), -degree DECIMAL(4,1), -PRIMARY key(sno,cno) -); - -CREATE TABLE teacher( -tno VARCHAR (20) not null PRIMARY KEY, -tname VARCHAR (20) not NULL, -tsex VARCHAR (20) COMMENT'教工性别' not null, -tbirthday datetime, -prot VARCHAR (20), -depart VARCHAR (20) not null -); -SELECT * FROM teacher; -INSERT INTO student VALUES(108,'曾华','男', '1977-9-1', '95033'), -(105,'匡明','男','1975-10-2', '95031'), -(107,'王丽','女','1976-1-23','95033'), -(101,'李军','男','1976-2-20','95033'), -(109,'王芳','女','1975-2-10','95031'), -(103,'陆君','男','1974-6-3','95031'); -INSERT INTO course VALUES (3-105,'计算机导论',825), -(3-245,'操作系统',804), -(6-166,'数字电路',856), -(9-888,'高等数学',831); -INSERT INTO score VALUES(103,'3-245',86), -(105,'3-245',75), -(109,'3-245',68), -(103,'3-105',92), -(105,'3-105',88), -(109,'3-105',76), -(101,'3-105',64), -(107,'3-105',91), -(108,'3-105',78), -(101,'6-166',85), -(107,'6-166',79), -(108,'6-166',81); -INSERt INTo teacher VALUES(804,'李诚','男','1958-12-2','副教授','计算机系'), -(856,'张旭','男','1969-3-12','讲师','电子工程系'), -(825,'王萍','女','1972-5-5','助教','计算机系'), -(831,'刘冰','女','1977-8-14','助教','电子工程系'); -SELECT MAX(degree),sno,cno FROM score; --- set @@GLOBAL.sql_mode=''; --- --- set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; - -select Student.Sname,Score.Cno,Score.Degree from -Score inner join Student on Student.Sno=Score.Sno; --- 3.查询所有学生的Sno、Cname和Degree列。 -select Score.Sno,Course.Cname,Score.Degree FROM -Course inner join Score on Course.Cno=Score.Cno; --- 4.查询所有学生的Sname、Cname和Degree列。 -select Student.Sname,Course.Cname,Score.Degree FROM -Student inner join Score inner join Course -on Score.Sno=Student.Sno and Score.Cno=Course.Cno; --- 5.查询“95033”班学生的平均分。 -select round(sum(Degree) / count(Class),1) 成绩 from Student inner join Score on -Score.Sno=Student.Sno where Class='95033'; --- 6.查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 -select * from Score where Cno='3-105' and degree>(sno='109'); --- 7.查询score中选学多门课程的同学中分数为非最高分成绩的记录。 - --- 8.查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 -select * from Student inner join Score inner join Course on -Student.Sno=Score.Sno and Score.Cno=Course.Cno where -(Score.Sno='109') (select avg(Degree) from Score); --- 17.查询所有任课教师的Tname和Depart. -select tname,Depart from Teacher inner join Course on -Course.Tno=Teacher.Tno -where -Teacher.Tno = Course.Tno; --- 18.查询所有未讲课的教师的Tname和Depart. -select tname,Depart from Teacher inner join Course on -Course.Tno=Teacher.Tno -where -not (Teacher.Tno = Course.Tno); --- 19.查询“男”教师及其所上的课程。 -select Tname,Cname from Teacher inner join Course on -Teacher.Tno=Course.Tno -where -Tsex='男'; --- 20.查询最高分同学的Sno、Cno和Degree列。 -select sno,cno,Degree from Score -WHERE -(select max(Degree) from Score); --- 21.查询和“李军”同性别的所有同学的Sname. -select sname from Student -where -Ssex=(select Ssex from Student where Sname='李军'); --- 22.查询和“李军”同性别并同班的同学Sname. -select sname from Student -where -Ssex=(select Ssex from Student where Sname='李军') -and -Class=(select Class from Student where Sname='李军'); --- 23.查询所有选修“计算机导论”课程的“男”同学的成绩表. -select Degree from Course inner join Score inner join Student on -Course.Cno=Score.Cno and Score.Sno=Student.Sno -where -Ssex='男' -and -Cname=(select Cname from Course where Cname='计算机导论') ; diff --git "a/18 \345\276\220\346\260\270\346\267\263/20230309 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" "b/18 \345\276\220\346\260\270\346\267\263/20230309 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" deleted file mode 100644 index 4600d4ab4eaf5095a9f4798147d659b216ba8d53..0000000000000000000000000000000000000000 --- "a/18 \345\276\220\346\260\270\346\267\263/20230309 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" +++ /dev/null @@ -1,68 +0,0 @@ -```mysql -CREATE database if not EXISTS student charset utf8; -use student; -CREATE TABLE stuinto( -stuno VARCHAR(20), -stuname VARCHAR(10), -stusex enum('男','女'), -stuage int, -stuaddress VARCHAR(50), -stuseat INT -); -CREATE TABLE stuexam( -examno int, -stuno VARCHAR(20), -writtenexam int, -labexam int -); -CREATE TABLE stumarks( -examno int, -stuid VARCHAR(20), -score int -); --- 在如图的数据表上完成以下题目 -insert into stuinto VALUES ('s2501','张秋利','男',20,'美国硅谷',1),('s2502','李斯文','女',18,'湖北武汉',2),('s2503','马文才','男',18,'湖南长沙',3),('s2504','欧阳俊雄','女',21,'湖北武汉',4),('s2505','梅超风','男',16,'湖北武汉',5),('s2506','陈旋风','男',19,'美国硅谷',6); -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); -INSERT into stumarks VALUES(1,'s2501',88),(2,'s2501',92),(3,'s2501',53),(4,'s2502',60),(5,'s2502',99),(6,'s2503',82); -SELECT *FROM stumarks; -SELECT * FROM stuinto; -SELECT * FROM stuexam; -DROP TABLE stumarks; --- 1.查询出年龄比班上平均年龄大的学生的信息 -SELECT * FROM stuinto WHERE stuage>(SELECT avg(stuage)FROM stuinto) ; --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -SELECT * FROM (SELECT stuid,max(score) FROM stumarks GROUP BY stuid) stumarks RIGHT JOIN stuinto on stumarks.stuid = stuinto.stuno; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -select stuinto.stuno,stuname,stusex,round((writtenexam+labexam)/2,2) from stuinto left join stuExam on stuinto.stuno=stuexam.stuno group by stuinto.stuno; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -SELECT * FROM stuinto WHERE stuage>=20 and stusex='男'; -SELECT * FROM stuinto WHERE stuage in (SELECT stuage FROM stuinto WHERE stuage>=20) and stusex='男'; --- 5.查询出年龄比所有男生年龄都大的女生的信息 -SELECT * FROM stuinto WHERE stuage not in (SELECT stuage FROM stuinto WHERE stusex='男') and stusex='女'; --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -SELECT * FROM stumarks right join stuinto on stumarks.stuid=stuinto.stuno WHERE score>=60 GROUP BY stuid; --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -SELECT * FROM stuinto left JOIN stumarks on stumarks.stuid=stuinto.stuno WHERE score is not null GROUP BY stuno; - -select * from stuinto left join stumarks on stuinto.stuno=stumarks.stuid WHERE stuno not in (select score from stumarks) GROUP BY stuno ; --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -SELECT * FROM stuinto left JOIN stumarks on stumarks.stuid=stuinto.stuno WHERE score is null; - -select * from stuinto left join stumarks on stuinto.stuno=stumarks.stuid WHERE stuno not in (select score from stumarks) GROUP BY stuno; --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -SELECT * FROM stumarks RIGHT JOIN stuinto on stumarks.stuid=stuinto.stuno WHERE score>90; --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -SELECT * FROM stuinto left JOIN stumarks on stuinto.stuno=stumarks.stuid WHERE score not IN(SELECT avg(score) FROM stumarks )GROUP BY stuid; - --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) -select stuinto.* from stuinto left join stumarks on stuinto.stuno=stumarks.stuid where score > (select score from stumarks where stuid='s2501') group by stuid; --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) -select stuinto.* from stuinto ,(select stuid from stumarks where stuid!='s2501' group by stuid having max(score)>(select min(score) from stumarks where stuid='s2501')) b where stuinto.stuno=b.stuid; - --- 13.查询班上比所有男生年龄都要大的女生的信息 -select * from stuinto where stuage not in (select stuage from stuinfo where stusex='男') and stusex='女'; - --- 14.查询出只要比某个男生年龄大的女生的信息 -select * from stuinto where stuage>(select min(stuage) from stuinto where stusex='男') and stusex='女'; -``` - diff --git "a/18 \345\276\220\346\260\270\346\267\263/20230310 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" "b/18 \345\276\220\346\260\270\346\267\263/20230310 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" deleted file mode 100644 index ac1e0a17db01ee456049e503f7dc03eadb47e472..0000000000000000000000000000000000000000 --- "a/18 \345\276\220\346\260\270\346\267\263/20230310 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" +++ /dev/null @@ -1,121 +0,0 @@ -````mysql -``` - -``` - - - -CREATE DATABASE xiaoshuo CHARSET utf8; -use xiaoshuo; -CREATE TABLE author( -author_id int PRIMARY KEY,-- 作家编号,主键 -author_name varchar(20) not null UNIQUE KEY,-- 作家姓名、非空、不能重复 -credits int,-- 积分 -vip_id varchar(20) not null, -FOREIGN KEY (vip_id) REFERENCES vip(vip_id)-- 等级编号,非空、外键关联等级信息表 -); -set FOREIGN_key_checks=0; -DROP TABLE author; -CREATE TABLE vip( -vip_id varchar(20) PRIMARY KEY,-- 等级编号,主键 -vip_name varchar(20) NOt null UNIQUE KEY -- 等级名称,非空,不能重复 -); -CREATE TABLE story ( -story_id int PRIMARY key auto_increment,-- 作品编号,主键,自增 -author_id int,-- 作家编号,外键,关联作家信息表 -FOREIGN KEY (author_id) REFERENCES author(author_id), -type_id varchar(20),-- 类型编号,外键,关键作品类型表 -FOREIGN KEY (type_id) references type(type_id), -story_name varchar(50),-- 作品名称 -views_number int -- 浏览量 -); -CREATE TABLE type( -type_id varchar(20) PRIMARY KEY,-- 类型编号,主键 -type_name varchar(20) not NULL UNIQUE KEY-- 类型名称,非空,不能重复 -); -INSERT INTO author VALUES -(1001,'朱逸群',600,'VIP02'), -(1002,'范建',8510,'VIP04'), -(1003,'史珍香',981,'VIP02'), -(1004,'范统',2364,'VIP02'), -(1005,'杜子腾',257,'VIP01'), -(1006,'刘产',678,'VIP02'), -(1007,'杜琦燕',438,'VIP03'); -INSERT INTO vip VALUES -('VIP01','青铜作家'), -('VIP02','白银作家'), -('VIP03','黄金作家'), -('VIP04','钻石作家'); -INSERT INTO story VALUES -(1,'1002','L03','母猪产后与护理师的二三事',6541), -(2,'1005','L04','拖拉机大战蜘蛛侠',563), -(3,'1003','L01','这只小龙虾不正经',8754), -(4,'1006','L04','一个爹爹三个娃',36354), -(5,'1006','L01','皇上滚开本宫只劫财',3674), -(6,'1005','L05','给长城贴瓷砖的小太监',6541), -(7,'1003','L03','不科学御兽',1257), -(8,'1005','L01','镜面管理局',3216), -(9,'1004','L02','关于我成为灭魂师之后',1147), -(10,'1004','L05','公子别秀',2078); -INSERT INTO type vALUES -('L01','玄幻'), -('L02','奇幻'), -('L03','武侠'), -('L04','仙侠'), -('L05','都市'); - --- 1. 根据前面提供的表结构和表数据,创建数据库并分别创建这张四张表;并插入相关数据。(提醒:外键 --- 请注意建表顺序和插入数据的顺序) (30分) --- 2. 将story 表中的story_name字段类型改成varchar(40) 。(2分) -ALTER TABLE story MODIFY story_name VARCHAR (40); --- 3. 在author表中增加一个性别字段 字段名:author_sex,类型: char(10),要求默认值为'男'。 (3分) -ALTER TABLE AUTHOR ADD author_sex char(10) DEFAULT '男'; - --- 4. 将作家编号为1005、1007的作家性别改为'女' 。(2分) -SELECT * FROM author; -UPDATE author SET author_sex='女' WHERE author_id=1005 || author_id=1007; --- 5. 作家杜子腾,写了一篇名为《拜登夸我很帅》的都市小说,有854个浏览量,请将这条信息插入到story --- 表。(3分) -SELECT * FROM story; -INSERT into story(story_name,views_number) VALUES('拜登夸我很帅',854); --- 6. 《拖拉机大战蜘蛛侠》这篇小说,浏览量涨了100,请更新story表中的相关数据。(2分) -UPDATE story SET views_number=(views_number+100) WHERE story_name='拖拉机大战蜘蛛侠'; --- 7. 请删除story表的中《皇上滚开本宫只劫财》这篇小说相关数据。(2分) -DELETE FROm story WHERE story_name='皇上滚开本宫只劫财'; --- 8. 查询 浏览量大于 8000的小说的作者编号和小说作品名称。(2分) -SELECT * FROM story WHERE views_number>8000; --- 9. 查询积分大于1000 并且会员等级高于vip03的作家所有信息。(3分) -SELECT * FROM author WHERE credits>1000 AND vip_id>'vip03'; --- 10. 查询姓名以杜字开头的作家的姓名,积分和等级编号。(3分) -SELECT * FROM author WHERE author_name like '杜%'; --- 11. 查询积分在100、1000之间的作家信息,以积分降序排列。 (3分) -SELECT * FROM author WHERE credits BETWEEN 100 and 1000 GROUP BY credits desc; --- 12. 查询出小说的总浏览量,最高浏览量,最小浏览量,平均浏览量,给字段用上中文别名。(3分) -SELECT SUM(views_number) 总浏览量,max(views_number) 最高浏览量,min(views_number) 最小浏览量,AVG(views_number) 平均浏览量 FROM story; --- 13. 查询各种等级的作家的平均积分和作家数量,并对查询结果使用中文别名。(3分) -SELECT avg(credits),COUNT(author_id) FROM author GROUP BY author_id; --- 14. 查询小说数量大于等于2的分类编号和小说数量。(4分) -SELECT type.type_id,COUNT(type.type_id) from story LEFT JOIN type ON story.type_id=type.type_id GROUP BY type_name HAVING COUNT(type.type_id)>=2; --- 15. 查询所有小说中浏览量最少的书的作品编号、作品名称和类型编号、浏览量。(4分) -SELECT * FROM story; -SELECT *,MIN(views_number) FROM story; - --- 16. 查询积分比刘产高的作者所有信息。(5分) -SELECT * from author; -(SELECT credits FROM author WHERE author_name='刘产'); -SELECT * FROM author WHERE credits >(SELECT credits FROM author WHERE author_name='刘产'); --- 17. 查询出哪些白银作家是没有写小说的,显示这些作家的姓名、等级名称。(8分) -SELECT story_id, story_name,type_id,views_number FROM story WHERE views_number = (SELECT MIN(views_number) FROM story); - --- 18. 找出写过作品浏览量大于5000的作家的所有作品中浏览量不到1000的作品信息(8分) -SELECT * from story WHERE author_id in(SELECT author_id FROM story WHERE views_number > 5000 ) AND views_number<1000; --- 19. 查询所有小说的小说编号、小说名称、浏览量、分类名称、作者姓名、作者积分、作者等级名称,结果 --- 字段要用中文别名,并按浏览量降序排列,如果浏览量一样的,再按积分降序排列。(10分) -SELECT s.story_id'小说编号' ,s.story_name'小说名称',s.views_number'浏览量',t.type_name'分类名称',a.author_name'作者姓名', a.credits'作者积分',v.vip_name'作者等级名称' from story s LEFT JOIN author a on s.author_id=a.author_id -left join vip v on v.vip_id =a.vip_id -LEFT JOIN type t on s.type_id= t.type_id - ORDER BY s.views_number desc , a.credits desc; -```` - - - diff --git "a/19\345\275\255\345\213\207\346\226\214/1.1\343\200\201\345\237\272\346\234\254\346\246\202\345\277\265.md" "b/19\345\275\255\345\213\207\346\226\214/1.1\343\200\201\345\237\272\346\234\254\346\246\202\345\277\265.md" deleted file mode 100644 index 492df7d36cd5f3ee23d6c554a953acb1f827c9b5..0000000000000000000000000000000000000000 --- "a/19\345\275\255\345\213\207\346\226\214/1.1\343\200\201\345\237\272\346\234\254\346\246\202\345\277\265.md" +++ /dev/null @@ -1,98 +0,0 @@ -## 1.1、基本概念 - -数据库是什么? - -存储数据的地方 - -DB 数据库(Database) - -数据库的分类 - -早期:层次模型、网状模型、关系模型, - -随着时间的推移和市场竞争,最终,基于关系模型的关系型数据库获得了绝对市场份额。 - -目前市场上主要分: - -关系型数据库、非关系型数据库两个 - -关系型数据库管理系统 :MySQL , Oracle , SQL Server , SQLite , DB2 , ... - -非关系型数据库管理系统:Redis , MongoDB , ... - -数据库有了,要怎么管理呢? - -DBMS:数据库管理系统 ( DataBase Management System )是一种操纵和管理数据库的大型软件 - -MYSQL,oracle SqlServer 都是数据库管理系统 - -![image-20230217130233434](C:\Users\17611\AppData\Roaming\Typora\typora-user-images\image-20230217130233434.png) - -1.查看所有的数据库 - -```my -show databases; -``` - -2.创建数据库 - -```my -create database 数据库名 charset utf8; -``` - -3.删除数据库 - -```my -drop database 数据库名; -``` - -4.使用数据库 - -```my -use 数据库名; -``` - -没有使用use语句,后面针对数据库的操作也没有加“数据名”的限定,那么会报错. - -1.查看库的所有表 - -```my -show tables; #要求前面有use语句 - -show tables from 数据库名; -``` - -2.创建表格 - -```my -create table 表名称( - 字段名 数据类型, -); -``` - -如果是最后一个就不可以加逗号, - -3.查看表的定义的表结构 - -```my -desc 表名称; -``` - -4.添加一条记录 - -```my -insert into 表名称 values(值列表); -``` - -5.查看一个表的数据 - -```my -select * from 表名称; -``` - -6.删除表 - -```my -deop table 表名称; -``` - diff --git "a/19\345\275\255\345\213\207\346\226\214/11\343\200\201DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" "b/19\345\275\255\345\213\207\346\226\214/11\343\200\201DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" deleted file mode 100644 index 40289287d02aafa2fb91aa53a0c3161324b4f6e7..0000000000000000000000000000000000000000 --- "a/19\345\275\255\345\213\207\346\226\214/11\343\200\201DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" +++ /dev/null @@ -1,279 +0,0 @@ -## 笔记 ## - -#### 数据库操作 - -查询所有数据库: -`SHOW DATABASES;` -查询当前数据库: -`SELECT DATABASE();` -创建数据库: -`CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ];` -删除数据库: -`DROP DATABASE [ IF EXISTS ] 数据库名;` -使用数据库: -`USE 数据库名;` - -查询当前数据库所有表: -`SHOW TABLES;` -查询表结构: -`DESC 表名;` -查询指定表的建表语句: -`SHOW CREATE TABLE 表名;` - -创建表: - -```mysql -CREATE TABLE 表名( - 字段1 字段1类型 [COMMENT 字段1注释], - 字段2 字段2类型 [COMMENT 字段2注释], - 字段3 字段3类型 [COMMENT 字段3注释], - ... - 字段n 字段n类型 [COMMENT 字段n注释] -)[ COMMENT 表注释 ]; -``` - -**最后一个字段后面没有逗号** - -添加字段: -`ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];` - -修改数据类型: -`ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);` -修改字段名和字段类型: -`ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];` -`ALTER TBLE emp CHANGE nickname username varchar(30) COMMENT '昵称';` - -删除字段: -`ALTER TABLE 表名 DROP 字段名;` - -修改表名: -`ALTER TABLE 表名 RENAME TO 新表名` - -删除表: -`DROP TABLE [IF EXISTS] 表名;` -删除表,并重新创建该表: -`TRUNCATE TABLE 表名;` - -## 第1题 - -1、创建数据库test01_market - -2、创建表格customers - -| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date | - -**要求3:**将c_contact字段移动到c_birth字段后面 - -**要求4:**将c_name字段数据类型改为 varchar(70) - -**要求5:**将c_contact字段改名为c_phone - -**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -**要求7:**将表名改为customers_info - -**要求8:**删除字段c_city - -```mysql --- ## 第1题 --- --- 1、创建数据库test01_market -CREATE DATABASE if not EXISTS test01_market; --- --- 2、创建表格customers --- --- | 字段名 | 数据类型 | --- | --------- | ----------- | --- | c_num | int(11) | --- | c_name | varchar(50) | --- | c_contact | varchar(50) | --- | c_city | varchar(50) | --- | c_birth | date | -USE test01_market; -CREATE TABLE customers( -c_num int(11), -c_name VARCHAR(50), -c_contact VARCHAR(50), -c_city VARCHAR(50), -c_birth date -) --- --- **要求3:**将c_contact字段移动到c_birth字段后面 -DESC customers; -ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth; --- --- **要求4:**将c_name字段数据类型改为 varchar(70) -ALTER TABLE customers MODIFY c_name VARCHAR(70); --- --- **要求5:**将c_contact字段改名为c_phone -ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); --- --- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -ALTER TABLE customers ADD c_gender CHAR(1) ALTER c_name; --- --- **要求7:**将表名改为customers_info --- -ALTER TABLE customers RENAME customers_info; - --- **要求8:**删除字段c_city -ALTER TABLE customers_info DROP c_city; -``` - -## 第2题 - -1、创建数据库test02_library - -2、创建表格books - -| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------- | -------- | ------------- | -------- | ---- | -| b_id | 书编号 | int(11) | 否 | 是 | -| b_name | 书名 | varchar(50) | 否 | 否 | -| authors | 作者 | varchar(100) | 否 | 否 | -| price | 价格 | float | 否 | 否 | -| pubdate | 出版日期 | year | 否 | 否 | -| note | 说明 | varchar(100) | 是 | 否 | -| num | 库存 | int(11) | 否 | 否 | - -3、向books表中插入记录 - -1) 指定所有字段名称插入第一条记录 - -2)不指定字段名称插入第二记录 - -3)同时插入多条记录(剩下的所有记录) - -| b_id | b_name | authors | price | pubdate | note | num | -| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -4、将小说类型(novel)的书的价格都增加5。 - -5、将名称为EmmaT的书的价格改为40。 - -6、删除库存为0的记录 - -```mysql - -``` - - - -## 第3题 - -1、创建数据库test03_bookstore - -2、创建book表 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| sales | int(11) | NO | | NULL | | -| stock | int(11) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------------+------------+-------+-------+-------+----------------------------+ -| id | title | author | price | sales | stock | img_path | -+----+-------------+------------+-------+-------+-------+-----------------------------+ -| 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | -| 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | -+----+---------------+------------+-------+-------+-------+----------------------------+ -``` - -3、创建用户表users,并插入数据 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| username | varchar(100) | NO | UNI | NULL | | -| password | varchar(100) | NO | | NULL | | -| email | varchar(100) | YES | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+----------+----------------------------------+--------------------+ -| id | username | password | email | -+----+----------+----------------------------------+--------------------+ -| 1 | admin | 112233 | admin@mxdx.com | -+----+----------+----------------------------------+--------------------+ -``` - -4、创建订单表orders - -```mysql -+--------------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+--------------+--------------+------+-----+---------+-------+ -| id | varchar(100) | NO | PRI | NULL | | -| order_time | datetime | NO | | NULL | | -| total_count | int(11) | NO | | NULL | | -| total_amount | double(11,2) | NO | | NULL | | -| state | int(11) | NO | | NULL | | -| user_id | int(11) | NO | MUL | NULL | | -+--------------+--------------+------+-----+---------+-------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----------------+---------------------+-------------+--------------+-------+---------+ -| id | order_time | total_count | total_amount | state | user_id | -+----------------+---------------------+-------------+--------------+-------+---------+ -| 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | -+----------------+---------------------+-------------+--------------+-------+---------+ -``` - -5、创建订单明细表order_items - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| count | int(11) | NO | | NULL | | -| amount | double(11,2) | NO | | NULL | | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -| order_id | varchar(100) | NO | MUL | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------+--------+---------+---------+-------+----------------+----------------+ -| id |count| amount| title | author | price | img_path | order_id | -+----+-------+--------+------------+----------+-------+----------------+----------------+ -| 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | -| 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | -+----+-------+--------+------------+----------+-------+------------+----------------+ -``` diff --git "a/19\345\275\255\345\213\207\346\226\214/2\343\200\201DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274.md" "b/19\345\275\255\345\213\207\346\226\214/2\343\200\201DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274.md" deleted file mode 100644 index adf3750acc1876f4d2e8852e590f1464161fa10c..0000000000000000000000000000000000000000 --- "a/19\345\275\255\345\213\207\346\226\214/2\343\200\201DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274.md" +++ /dev/null @@ -1,401 +0,0 @@ -## 笔记 ## - -#### 数据库操作 - -查询所有数据库: -`SHOW DATABASES;` -查询当前数据库: -`SELECT DATABASE();` -创建数据库: -`CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ];` -删除数据库: -`DROP DATABASE [ IF EXISTS ] 数据库名;` -使用数据库: -`USE 数据库名;` - -#### 表操作 - -查询当前数据库所有表: -`SHOW TABLES;` -查询表结构: -`DESC 表名;` -查询指定表的建表语句: -`SHOW CREATE TABLE 表名;` - -创建表: - -```mysql -CREATE TABLE 表名( - 字段1 字段1类型 [COMMENT 字段1注释], - 字段2 字段2类型 [COMMENT 字段2注释], - 字段3 字段3类型 [COMMENT 字段3注释], - ... - 字段n 字段n类型 [COMMENT 字段n注释] -)[ COMMENT 表注释 ]; -``` - -**最后一个字段后面没有逗号** - -添加字段: -`ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];` - -修改数据类型: -`ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);` -修改字段名和字段类型: -`ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];` - -删除字段: -`ALTER TABLE 表名 DROP 字段名;` - -修改表名: -`ALTER TABLE 表名 RENAME TO 新表名` - -删除表: -`DROP TABLE [IF EXISTS] 表名;` -删除表,并重新创建该表: -`TRUNCATE TABLE 表名;` - -#### 添加数据 - -指定字段: -`INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);` -全部字段: -`INSERT INTO 表名 VALUES (值1, 值2, ...);` - -批量添加数据: -`INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);` -`INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);` - -#### 更新和删除数据 - -修改数据: -`UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ];` - -删除数据: -`DELETE FROM 表名 [ WHERE 条件 ];` - -## 第1题 - -1、创建数据库test01_company - -2、创建表格offices - -| 字段名 | 数据类型 | -| ---------- | ----------- | -| officeCode | int | -| city | varchar(30) | -| address | varchar(50) | -| country | varchar(50) | -| postalCode | varchar(25) | - -3、创建表格employees - -| 字段名 | 数据类型 | -| ------------- | ---------------------------- | -| empNum | int(11) | -| lastName | varchar(50) | -| firstName | varchar(50) | -| mobile | varchar(25) | -| code | int | -| jobTitle | varchar(50) | -| birth | date | -| Note | varchar(255) | -| Sex | varchar(5) | - -**要求4:**将表employees的mobile字段修改到code字段后面。 - -**要求5:**将表employees的birth字段改名为birthday; - -**要求6:**修改sex字段,数据类型为char(1)。 - -**要求7:**删除字段note; - -**要求8:**增加字段名favoriate_activity,数据类型为varchar(100); - -**要求9:**将表employees的名称修改为 employees_info - -```mysql --- ## 第1题 --- --- 1、创建数据库 test01_company -create database if not exists test01_company; -USE test01_company; - --- 2、创建表格 offices --- --- | 字段名 | 数据类型 | --- | ---------- | ----------- | --- | officeCode | int | --- | city | varchar(30) | --- | address | varchar(50) | --- | country | varchar(50) | --- | postalCode | varchar(25) | -create TABLE offices( -officecode int, -city varchar(30), -address varchar(50), -country varchar(50), -postalcode varchar(25) -) --- --- 3、创建表格 employees --- --- | 字段名 | 数据类型 | --- | --------- | ------------- | --- | empNum | int(11) | --- | lastName | varchar(50) | --- | firstName | varchar(50) | --- | mobile | varchar(25) | --- | code | int | --- | jobTitle | varchar(50) | --- | birth | date | --- | Note | varchar(255) | --- | Sex | varchar(5) | -create table employees( -empNum int, -lastName varchar(50), -firstName varchar(50), -mobile varchar(25), -`code` int, -jobTitle varchar(50), -birth DATE, -note varchar(255), -Sex varchar(5) -); --- --- **要求4:**将表 employees 的 mobile 字段修改到code字段后面。 -alter table employees modify mobile varchar(25) after `code`; --- --- **要求5:**将表employees的birth字段改名为 birthday ; -alter table employees rename birthday; --- --- **要求6:**修改sex字段,数据类型为char(1)。 -alter table birthday modify sex char(1); --- --- **要求7:**删除字段note; -alter table birthday drop note; --- -desc birthday; --- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); -alter table birthday add COLUMN favoriate_activity varchar(100); --- --- **要求9:**将表employees的名称修改为 employees_info -alter table birthday rename employees_info; -``` - - - -## 第2题 - -1、创建数据库test02db - -2、创建表格pet - -| 字段名 | 字段说明 | 数据类型 | -| ------- | -------- | ----------- | -| name | 宠物名称 | varchar(20) | -| owner | 宠物主人 | varchar(20) | -| species | 种类 | varchar(20) | -| sex | 性别 | char(1) | -| birth | 出生日期 | year | -| death | 死亡日期 | year | - -3、添加记录 - -| name | owner | species | sex | birth | death | -| ------ | ------ | ------- | ---- | ----- | ----- | -| Fluffy | harold | Cat | f | 2003 | 2010 | -| Claws | gwen | Cat | m | 2004 | | -| Buffy | | Dog | f | 2009 | | -| Fang | benny | Dog | m | 2000 | | -| bowser | diane | Dog | m | 2003 | 2009 | -| Chirpy | | Bird | f | 2008 | | - -4、 添加字段主人的生日owner_birth。 - -5、 将名称为Claws的猫的主人改为kevin - -6、 将没有死的狗的主人改为duck - -7、 查询没有主人的宠物的名字; - -8、 查询已经死了的cat的姓名,主人,以及去世时间; - -9、 删除已经死亡的狗 - -10、查询所有宠物信息 - -```sql - - -``` - -## 第3题 - -1、创建数据库:test03_company - -```sql -create database test03_company charset utf8; -``` - -2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - -A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - -```mysql -use test03_company ; -create table department( - depid int primary key auto_increment, - depname char(10) not null unique key, - deinfo varchar(200) -) -``` - -B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - -* ​ 雇员编号为主键; -* ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); -* ​ 性别默认为男; - -```mysql -create table employee ( - empid int primary key auto_increment, - name varchar(10) not null, - sex enum('男','女') not null default '男', - title varchar(10), - birthday date, - depid int foreign key references department(depid) -) -``` - -C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - -3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) - -4、添加数据如下: - -部门表: - -| 部门编号 | 部门名称 | 部门简介 | -| -------- | -------- | ------------ | -| 111 | 生产部 | Null | -| 222 | 销售部 | Null | -| 333 | 人事部 | 人力资源管理 | - - 雇员表: - -| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | -| -------- | ---- | ---- | ---------- | ---------- | ------------ | -| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | -| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | -| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | -| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | - - 工资表: - -| 雇员编号 | 基本工资 | 职务工资 | 扣除 | -| -------- | -------- | -------- | ---- | -| 1001 | 2200 | 1100 | 200 | -| 1002 | 1200 | 200 | NULL | -| 1003 | 2900 | 700 | 200 | -| 1004 | 1950 | 700 | 150 | - - - -## 第4题 - -1、创建一个数据库:test04_school - -2、创建如下表格 - -表1 Department表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | -| DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | -| DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | - -表2 Teacher表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| Number | 教工号 | int | 是 | 否 | 是 | 是 | -| Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | -| Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | -| Birth | 出生日期 | date | 否 | 否 | 否 | 否 | -| DepNo | 部门号 | int | 否 | 是 | 否 | 否 | -| Salary | 工资 | float | 否 | 否 | 否 | 否 | -| Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | - -3、添加记录 - -| **DepNo** | **DepName** | **DepNote** | -| --------- | ----------- | ------------------ | -| 601 | 软件技术系 | 软件技术等专业 | -| 602 | 网络技术系 | 多媒体技术等专业 | -| 603 | 艺术设计系 | 广告艺术设计等专业 | -| 604 | 管理工程系 | 连锁经营管理等专业 | - -| **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | -| ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | -| 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | -| 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | -| 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | -| 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | -| 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | - -4、用SELECT语句查询Teacher表的所有记录。 - -```mysql --- ## 第4题 --- --- 1、创建一个数据库:test04_school -drop database test04_school; -create database test04_school charset utf8; --- 2、创建如下表格 -use test04_school; --- 表1 Department 表的定义 -drop table Department; -create table Department( - DepNo int(10) primary key not null unique key comment '部门号', - DepName varchar(20) not null comment '部门名称', - DepNote varchar(50) comment '部门备注' -); --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | --- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | --- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | --- --- 表2 Teacher 表的定义 - -create table Teacher( - Number int primary key not null unique key comment '教工号', - Name varchar(30) not null comment '姓名', - Sex varchar(4) comment '性别', - Birth date comment '出生日期', - DepNo int comment '部门号', - Salary float comment '工资', - Address varchar(100) comment '家庭住址', - foreign key (DepNo) references Department (DepNo) -); --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | Number | 教工号 | int | 是 | 否 | 是 | 是 | --- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | --- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | --- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | --- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | --- | Salary | 工资 | float | 否 | 否 | 否 | 否 | --- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | --- --- 3、添加记录 -insert into Department values(601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'), -(603,'艺术设计系','广告艺术 -``` - - - - - diff --git "a/19\345\275\255\345\213\207\346\226\214/\344\275\234\344\270\2323_\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" "b/19\345\275\255\345\213\207\346\226\214/\344\275\234\344\270\2323_\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" deleted file mode 100644 index 5549526ae01bc077f85aae6d44a7808440e09664..0000000000000000000000000000000000000000 --- "a/19\345\275\255\345\213\207\346\226\214/\344\275\234\344\270\2323_\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" +++ /dev/null @@ -1,262 +0,0 @@ -# 笔记 # - -查询多个字段: -`SELECT 字段1, 字段2, 字段3, ... FROM 表名;` -`SELECT * FROM 表名;` - -表别名: -`SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;` - -库别名 - -```mysql -select * from 表名 as 别名; --不支持任何引导 -``` - - - -#### 条件查询 -`SELECT 字段列表 FROM 表名 WHERE 条件列表;` - -条件: - -| 比较运算符 | 功能 | -| ------------------- | ------------------------------------------- | -| > | 大于 | -| >= | 大于等于 | -| < | 小于 | -| <= | 小于等于 | -| = | 等于 | -| <> 或 != | 不等于 | -| BETWEEN ... AND ... | 在某个范围内(含最小、最大值) | -| IN(...) | 在in之后的列表中的值,多选一 | -| LIKE 占位符 | 模糊匹配(\_匹配单个字符,%匹配任意个字符) | -| IS NULL | 是NULL | - -| 逻辑运算符 | 功能 | -| ------------------ | ---------------------------- | -| AND 或 && | 并且(多个条件同时成立) | -| OR 或 || | 或者(多个条件任意一个成立) | -| NOT 或 ! | 非,不是 | - -查看某个表的数据 - -```my -select * from 表名; -- 没use的话可以在表名前加上数据库名. - -- *是列 表名后面 where 条件(行) -``` - -结果去重 - -```mysql -select distinct 字段列表 from 表名 [where 条件]; -distinct 只能放在第一个字段前面 (只支持一个字段) -``` - - - - - - - - - -## 第1题:员工表 - -```mysql -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - - - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - -**要求1:**查询出薪资在12000~13000之间的员工信息。 - -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -**要求3:**将“李四”的家庭住址改为“广东韶关” - -**要求4:**查询出名字中带“小”的员工 - -**要求5:**查询出薪资高于11000的男员工信息 - -**要求6:**查询没有登记电话号码的员工 - -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - -```mysql --- 第1题:员工表 -drop database employee; -create database employee charset utf8; --- | **id** | **name** | **sex** | **tel** | **addr** | **salary** | --- | ------ | -------- | ------- | ------------ | -------- | ---------- | --- | 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | --- | 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | --- | 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | --- | 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | --- | 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | -use employee; -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -) -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); --- **要求1:**查询出薪资在12000~13000之间的员工信息。 -select * from employee where salary between 12000 and 13000; --- **要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 -select id,name,addr from employee where name like '刘%'; --- **要求3:**将“李四”的家庭住址改为“广东韶关” -update employee set addr = '广东韶关' where name = '李四'; --- **要求4:**查询出名字中带“小”的员工 -select * from employee where name like '%小%'; --- **要求5:**查询出薪资高于11000的男员工信息 -select * from employee where salary>11000 and sex = '男'; --- **要求6:**查询没有登记电话号码的员工 -select * from employee where tel is null; --- **要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 -select * from employee where salary>12000 or addr='广东深圳' or addr like '%广州%' and sex = '男'; --- **要求8:**查询每个员工的年薪,显示“姓名、年薪” -select name 姓名,salary 年薪 from employee; -``` - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -``` - -**要求1:** 查询大国 的国家名称、人口和面积。 - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) - -- 人口至少为 2500 万(即 25000000) - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -**要求4:**查询国家名字中包含“o“字母的国家信息 - -**要求5:**查询GDP值超过10000000000的国家信息 - -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -```mysql --- ## 第2题:国家信息表 -create database ku charset utf8; --- countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 --- 表数据样例: --- +-------------+-----------+---------+------------+--------------+ --- | name | continent | area | population | gdp | --- +-------------+-----------+---------+------------+--------------+ --- | Afghanistan | Asia | 652230 | 25500100 | 20343000000 | --- | Albania | Europe | 28748 | 2831741 | 12960000000 | --- | Algeria | Africa | 2381741 | 37100000 | 188681000000 | --- | Andorra | Europe | 468 | 78115 | 3712000000 | --- | Angola | Africa | 1246700 | 20609294 | 100990000000 | --- +-------------+-----------+---------+------------+--------------+ -use ku; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); --- **要求1:** 查询大国 的国家名称、人口和面积。 --- 如果一个国家满足下述两个条件之一,则认为该国是 大国 : --- - 面积至少为 300万平方公里(即,3000000 km2) --- - 人口至少为 2500 万(即 25000000) -select name,population,area from countries_info where area >= 3000000 or population >=25000000; --- **要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 -select * from countries_info where continent = 'asia'; --- **要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 -select * from countries_info where area <10000 and population<100000; --- **要求4:**查询国家名字中包含“o“字母的国家信息 -select * from countries_info where !(name like '%o%'); --- **要求5:**查询GDP值超过10000000000的国家信息 -select * from countries_info where gdp > 10000000000; --- **要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” -select name 国家名,population 人口,gdp GDP值,gdp/population 人均贡献GDP值 from countries_info; --- **要求7:**查询人均贡献GDP值低于1000的国家信息。 -select * from countries_info where gdp/population<1000; --- **要求8:**查询每个国家的人均国土面 -``` - diff --git "a/19\345\275\255\345\213\207\346\226\214/\345\205\263\350\201\224\346\237\245\350\257\242\345\222\214\345\237\272\346\234\254\350\277\220\347\256\227\347\254\246\347\254\224\350\256\260.md" "b/19\345\275\255\345\213\207\346\226\214/\345\205\263\350\201\224\346\237\245\350\257\242\345\222\214\345\237\272\346\234\254\350\277\220\347\256\227\347\254\246\347\254\224\350\256\260.md" deleted file mode 100644 index c71c437385dcfce668906316c60ec4a6e8a0630d..0000000000000000000000000000000000000000 --- "a/19\345\275\255\345\213\207\346\226\214/\345\205\263\350\201\224\346\237\245\350\257\242\345\222\214\345\237\272\346\234\254\350\277\220\347\256\227\347\254\246\347\254\224\350\256\260.md" +++ /dev/null @@ -1,74 +0,0 @@ -## 笔记 ## - -查询多个字段: -`SELECT 字段1, 字段2, 字段3, ... FROM 表名;` -`SELECT * FROM 表名;` - -设置别名: -`SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;` - -**常用分组函数类型** - -* **AVG(x)** :求平均值 -* **SUM(x)**:求总和 -* **MAX(x)** :求最大值 -* **MIN(x)** :求最小值 -* **COUNT(x) **:统计记录数 - - - -1、内连接:inner join ... on - -结果:A表 ∩ B表 - -2、左连接:A left join B on - -(2)A表全部 - -(3)A表- A∩B - -3、右连接:A right join B on - -(4)B表全部 - -(5)B表-A∩B - - - -CREATE TABLE `course` ( - `Cno` varchar(20) NOT NULL, - `Cname` varchar(20) NOT NULL, - `Tno` varchar(20) NOT NULL, - PRIMARY KEY (`Cno`), - KEY `Tno` (`Tno`), - CONSTRAINT `course_ibfk_1` FOREIGN KEY (`Tno`) REFERENCES `teacher` (`Tno`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -CREATE TABLE `score` ( - `Sno` varchar(20) NOT NULL, - `Cno` varchar(20) NOT NULL, - `Degree` decimal(4,1) DEFAULT NULL, - KEY `Sno` (`Sno`), - KEY `Cno` (`Cno`), - CONSTRAINT `score_ibfk_1` FOREIGN KEY (`Sno`) REFERENCES `student` (`Sno`), - CONSTRAINT `score_ibfk_2` FOREIGN KEY (`Cno`) REFERENCES `course` (`Cno`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -CREATE TABLE `student` ( - `Sno` varchar(20) NOT NULL, - `Sname` varchar(20) NOT NULL, - `Ssex` varchar(20) NOT NULL, - `Sbirthday` datetime DEFAULT NULL, - `Class` varchar(20) DEFAULT NULL, - PRIMARY KEY (`Sno`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -CREATE TABLE `teacher` ( - `Tno` varchar(20) NOT NULL, - `Tname` varchar(20) NOT NULL, - `Tsex` varchar(20) NOT NULL, - `Tbirthday` datetime DEFAULT NULL, - `Prof` varchar(20) DEFAULT NULL, - `Depart` varchar(20) NOT NULL, - PRIMARY KEY (`Tno`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - - - diff --git "a/19\345\275\255\345\213\207\346\226\214/\345\255\220\346\237\245\350\257\242.md" "b/19\345\275\255\345\213\207\346\226\214/\345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index b9fbe705dc9c348d985824011538ad0007e21e25..0000000000000000000000000000000000000000 --- "a/19\345\275\255\345\213\207\346\226\214/\345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,262 +0,0 @@ -from : 从哪些表中筛选 - -1. on : 关联多表查询时,去除笛卡尔积 -2. where : 从表中筛选的条件 -3. group by : 分组依据 -4. having:在统计结果中再次筛选 -5. order by: 排序 -6. limit:分页 - -必须按照(1)~(7)的顺序 编写字句 - -**from字句** - -```mysql -# 1.from 语句 -select * -from t_employee; -``` - -**on字句** - -```sql --- (1) on 必须配合 join 使用 --- on 后面只写关联条件 --- 所谓的关联条件 是俩表的关联字段的关系 --- 有n张表关联,就有n-1个关联条件 --- 两张表关联,就有1个关联条件 --- 三张表关联,就有2个关联条件 -SELECT * -FROM t_employee INNER JOIN t_department -ON t_employee.did = t_department.did; -``` - -**where语句** - -```sql -# where 子句 在查询结果中筛选 -SELECT * -FROM t_employee INNER JOIN t_department -ON t_employee.did = t_department.did -WHERE gender = '女'; -``` - -**group by** - -```sql -group by -- 分组 -``` - -**having语句** - -```sql -/*having子句也写条件 -where的条件是针对原表中的记录的筛选。where后面不能出现分组函数。 -having子句是对统计结果(分组函数计算后)的筛选。having可以加分组函数。 -*/ -``` - -**limit语句** - -```sql -/*limit子句是用于分页显示结果。 -limit m,n -n:表示最多该页显示几行 -m:表示从第几行开始取记录,第一个行的索引是0 -m = (page-1)*n page表示第几页*/ -``` - -### 子查询 - -子查询 就是嵌套在一个SQL 语句中的查询 SELECT语句可以嵌套在另一个SELECT中,UPDATE,DELETE,INSERT,CREATE语句等。 - -#### select的where或HAVing中嵌套子查询 - -当子查询结果作为外层另一个SQL的过滤条件,通常把子查询嵌入到WHERE或HAVING中。根据子查询结果的情况,分为如下三种情况。 - -+ 单列 单个值 可以直接使用比较运算符如 < > <= >= = != 等于子查询结果进行比较 -+ 子查询结果为单列 多个值 直接 用 IN 或者 NOT IN -+ 单列 单个值 可以直接使用比较运算符如 < > <= >= = != 等于子查询结果进行比较 还可以 搭配 any 、some 、all 等关键字与查询结果进行比较 - -```sql -/*在where或having后面的子查询结果是: -(1)单个值,那么可以用=,>,<,>=,<=,!=这样的运算符和子查询的结果做比较 -(2)多个值,那么需要用in,not in, >all,>any....形式做比较 - 如“<”、“<=”、“>”、“>=”、“=”、“!=”等搭配ANY、SOME、ALL等关键字与查询结果进行比较*/ -``` - -**SELECT中的EXISTS型子查询** - -EXISTS型子查询也是存在外层SELECT的WHERE子句中,不过它和上面的WHERE型子查询的工作模式不相同,所以这里单独讨论它。 - -如果EXISTS关键字后面的参数是一个任意的子查询,系统将对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS的结果为false,此时外层查询语句不进行查询。EXISTS和NOT EXISTS的结果只取决于是否返回行,而不取决于这些行的内容,所以这个子查询输入列表通常是无关紧要的。 - -如果EXISTS关键字后面的参数是一个关联子查询,即子查询的WHERE条件中包含与外层查询表的关联条件,那么此时将对外层查询表做循环,即在筛选外层查询表的每一条记录时,都看这条记录是否满足子查询的条件,如果满足就再用外层查询的其他WHERE条件对该记录进行筛选,否则就丢弃这行记录。 - -**SELECT的FROM中嵌套子查询** - -当子查询结果是多列的结果时,通常将子查询放到FROM后面,然后采用给子查询结果取别名的方式,把子查询结果当成一张“动态生成的临时表”使用。 - -## 作业 - -```sql -create database ZyClass2 charset utf8; -use ZyClass2; -create table stuinfo( - stuNO varchar(10) primary key, - stuName varchar(5), - stuSex varchar(2), - stuAge int , - stuAddress varchar(10), - stuSeat int -); - -create table stuExam( - examNO int auto_increment primary key, - stuNO varchar(10) , - writtenExam int, - labExam int, - constraint sn foreign key(stuno) references stuinfo(stuno) -); - -create table stuMarks( - examNo int , - stuID varchar(10), - score int, - constraint en foreign key(examno) references stuexam(examno) -); - -insert into stuinfo values -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'湖北武汉',2), -('s2503','马文才','男',18,'湖南长沙',3), -('s2504','欧阳俊雄','女',21,'湖北武汉',4), -('s2505','梅超风','男',16,'湖北武汉',5), -('s2506','陈旋风','男',19,'美国硅谷',6); - - -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); - - -insert into stumarks values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); - --- 在如图的数据表上完成以下题目 - --- 1.查询出年龄比班上平均年龄大的学生的信息 - select * from stuinfo where stuage > (select avg(stuage) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) - select i.stuno,stuName,stusex,m.sc - from - stuinfo i,(select stuid, max(score) sc from stumarks group by stuid) m - where i.stuNO=m.stuID ; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) - select si.stuNO,stuname,stusex,round((avg(se.writtenExam+se.labExam)/2),2) 平均值 - from - stuinfo si,stuexam se - where si.stuNO=se.stuNO group by stuno; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) - - #普通查询 - select * - from - stuinfo - where stuSex='男' and stuage >='20'; - - #子查询 - select * - from - (select *from stuinfo where stuSex='男') s - where stuage >='20'; - --- 5.查询出年龄比所有男生年龄都大的女生的信息 - select * - from - stuinfo - where - stuage > all (select stuage from stuinfo where stuSex='男') and stuSex='女'; --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) - select distinct si.* - from - stuinfo si right join stumarks sm on si.stuNO=sm.stuID - where - stuno != (select stuid from stumarks where score<60) ; --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - - #方法一:表连接 - select distinct si.* - from - stuinfo si right join stumarks sm - on si.stuNO=sm.stuID; - - #方法二:in - select * - from - stuinfo - where - stuno in(select distinct stuid from stumarks); - --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - - #方法一:表连接 - select si.* - from - stuinfo si left join stumarks sm - on si.stuNO=sm.stuID - where - stuno != all (select distinct stuid from stumarks); - - #方法二:in - select * - from - stuinfo si left join stumarks sm - on si.stuNO=sm.stuID - where - stuno not in(select distinct stuid from stumarks); - --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) - select * - from - stuinfo where stuno - in - (select stuid from stumarks where score >'90'); --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) - select * from stuinfo where stuno = - (select stuid from - (select stuid, avg(score) a from stumarks group by stuid) s where a>80); --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) - select si.* - from - stuinfo si left join stuexam se - on si.stuno = se.stuno - where - se.writtenexam > (select writtenexam from stuexam where stuno = 's2501') - and se.labexam > (select labexam from stuexam where stuno = 's2501'); --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) - select distinct si.* - from - stuinfo si right join stumarks sm on si.stuno=sm.stuID - where score > any - (select score from stuinfo si right join stumarks sm on si.stuno=sm.stuID where stuname='张秋利') and stuno != 's2501'; --- 13.查询班上比所有男生年龄都要大的女生的信息 - select * - from stuinfo - where stuage > all - (select stuage from stuinfo where stusex='男') and stusex='女'; --- 14.查询出只要比某个男生年龄大的女生的信息 - select * - from stuinfo - where stuage > any - (select stuage from stuinfo where stusex='男') and stusex='女'; -``` \ No newline at end of file diff --git "a/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230221 DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" "b/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230221 DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" deleted file mode 100644 index 127a8f2c03b3b130d0332eb2b71fb46660e2494a..0000000000000000000000000000000000000000 --- "a/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230221 DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" +++ /dev/null @@ -1,287 +0,0 @@ -## 第1题 - -1、创建数据库test01_market - -**create database test01_maket;** - -2、创建表格customers - -**show databases;**** - **use test01_maket;** - **create table customers(** - **c_num int(11),** - **c_name VARCHAR(50),** - **c_contact varchar(50),** - **c_city varchar(50),** - **c_birth date** - **);** - **desc customers;** - **show create table customers;** - **show create database test01_maket;** - **alter database test01_maket character set utf8;** - **alter table customers charset utf8;**** - -| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date | - -**要求3:**将c_contact字段移动到c_birth字段后面 - -**alter table customers modify c_contact varchar(50) AFTER c_birth;** - -**要求4:**将c_name字段数据类型改为 varchar(70) - -**alter table customers modify c_name varchar(70)** - -**要求5:**将c_contact字段改名为c_phone - -**alter table customers change c_contact c_phone varchar(50);** - -**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -**alter table customers add c_gender char(1) AFTER c_name;** - -**要求7:**将表名改为customers_info - -**alter table customers rename to customers_info;** - -**要求8:**删除字段c_city - -**alter table customers_info drop column c_city;** - -```mysql - -``` - -## 第2题 - -1、创建数据库test02_library - -**create database test02_library;** -**use test02_library;** - -2、创建表格books - -**create table books(** -**b_id int(11),** -**b_name varchar(50),** -**authors varchar(100),** -**price float,** -**pubdate year,** -**note varchar(100),** -**num int(11)** -**);** - -| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------- | -------- | ------------- | -------- | ---- | -| b_id | 书编号 | int(11) | 否 | 是 | -| b_name | 书名 | varchar(50) | 否 | 否 | -| authors | 作者 | varchar(100) | 否 | 否 | -| price | 价格 | float | 否 | 否 | -| pubdate | 出版日期 | year | 否 | 否 | -| note | 说明 | varchar(100) | 是 | 否 | -| num | 库存 | int(11) | 否 | 否 | - -3、向books表中插入记录 - -1) 指定所有字段名称插入第一条记录 - -**insert into books(b_id,b_name,authors,price,pubdate,note,num) values(1,'Tal of AAA','Dickes',23,1995,'novel',11);** - -2)不指定字段名称插入第二记录 - -**insert into books values (2,'EmmaT','Jane lura',35,1993,'joke',22);** - -3)同时插入多条记录(剩下的所有记录) - -**insert into books values(3,'Story of Jane','Jane Tim',40,2001,'novel',0),(4,'Lovey Day','George Byron',20,2005,'novel',30),(5,'Old land','Honore Blade',30,2010,'law',0),(6,'The Battle','Upton Sara',30,1999,'medicine',40),(7,'Rose Hood','Richard haggard',28,2008,'cartoon',28);** - -| b_id | b_name | authors | price | pubdate | note | num | -| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -4、将小说类型(novel)的书的价格都增加5。 - -**update books set price = price+5 where note='novel';** - -5、将名称为EmmaT的书的价格改为40。 - -**update books set price =40 where b_name='EmmaT';** - -6、删除库存为0的记录 - -```mysql -delete from books where num=0; -``` - - - -## 第3题 - -1、创建数据库test03_bookstore - -**create database test03_bookstore;** -**use test03_bookstore;** - -2、创建book表 - -**create table book(** -**id int(11),** -**title varchar(100),** -**author varchar(100),** -**price double(11,2),** -**sales int(11),** -**stock int(11),** -**img_path varchar(100)** -**);** - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| sales | int(11) | NO | | NULL | | -| stock | int(11) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -**insert into book values(1,'解忧杂货店','东野圭吾',27.20,102,98,'upload/books/解忧杂货店.jpg');** - -```mysql -+----+-------------+------------+-------+-------+-------+----------------------------+ -| id | title | author | price | sales | stock | img_path | -+----+-------------+------------+-------+-------+-------+-----------------------------+ -| 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | -| 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | -+----+---------------+------------+-------+-------+-------+----------------------------+ -``` - -3、创建用户表users,并插入数据 - -**create table users(** -**id int(11),** -**unername varchar(109)password varchar(100)** -**email varchar(100)** -**);** - -**insert into users values (1,'admin',112233, 'admin@mxdx.com');** - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| username | varchar(100) | NO | UNI | NULL | | -| password | varchar(100) | NO | | NULL | | -| email | varchar(100) | YES | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+----------+----------------------------------+--------------------+ -| id | username | password | email | -+----+----------+----------------------------------+--------------------+ -| 1 | admin | 112233 | admin@mxdx.com | -+----+----------+----------------------------------+--------------------+ -``` - -4、创建订单表orders - -**create table orders(76 id varchar(100),** -**order time datetime** -**total count int(11)** -**total amount double(11,2)** -**state int(11)** -**user id int(11)** -**);** - -**insert into orders values ( 15294258455691 2018-06-20 00:30:452,50.2001);** - -```mysql -+--------------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+--------------+--------------+------+-----+---------+-------+ -| id | varchar(100) | NO | PRI | NULL | | -| order_time | datetime | NO | | NULL | | -| total_count | int(11) | NO | | NULL | | -| total_amount | double(11,2) | NO | | NULL | | -| state | int(11) | NO | | NULL | | -| user_id | int(11) | NO | MUL | NULL | | -+--------------+--------------+------+-----+---------+-------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----------------+---------------------+-------------+--------------+-------+---------+ -| id | order_time | total_count | total_amount | state | user_id | -+----------------+---------------------+-------------+--------------+-------+---------+ -| 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | -+----------------+---------------------+-------------+--------------+-------+---------+ -``` - -5、创建订单明细表order_items - -**create table order_items(** -**id int(11),** -**count int(11),** -**amount double(112),** -**title varchar(100),** -**author varchar(100),** -**price double(11,2),** -**img path varchar(100),** -**order id varchar(190)** -**);** - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| count | int(11) | NO | | NULL | | -| amount | double(11,2) | NO | | NULL | | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -| order_id | varchar(100) | NO | MUL | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -**insert into order items values (1,1,27.20,'解忧杂货店','东野丰吾',27.20,'static/img/default.jpg',15294258455691),(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg',15294258455691 );** - -```mysql -+----+-------+--------+---------+---------+-------+----------------+----------------+ -| id |count| amount| title | author | price | img_path | order_id | -+----+-------+--------+------------+----------+-------+----------------+----------------+ -| 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | -| 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | -+----+-------+--------+------------+----------+-------+------------+----------------+ -``` - -参考答案: - -```mysql - -``` - diff --git "a/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230222DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274+\347\254\224\350\256\260.md" "b/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230222DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274+\347\254\224\350\256\260.md" deleted file mode 100644 index 0848a26bb6feda1d6c262696855f9d63b724515b..0000000000000000000000000000000000000000 --- "a/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230222DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274+\347\254\224\350\256\260.md" +++ /dev/null @@ -1,724 +0,0 @@ -# MySQL语句 - -## 数据库 - -#### 创建数据库 - -```mysql -create database 数据库名 ; -create database 数据库名 charset 字符集; -``` - -#### 查看所有的数据库 - -```mysql -show databases; #有一个s,代表多个数据库 -``` - -#### 查看某个数据库的详细定义语句 - -```mysql -show create database 数据库名; -``` - -#### 修改数据库编码 - -```mysql -#修改数据库字符集和校对规则 -ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称 COLLATE 字符集对应校对规则; -ALTER DATABASE mxdx_chapter3_two CHARACTER SET utf8 COLLATE utf8_general_ci; -``` - -==**注意,**==修改数据库编码只会影响之后创建的表的默认编码,之前创建的表不会受影响。 - -#### 删除数据库 - -```mysql -drop database 数据库名; -``` - -#### 使用数据库 - -```mysql -use 数据库名; -``` - -## 数据表 - -#### 查看某个数据库的所有表格 - -```mysql -use 数据库名; -show tables; -show tables from 数据库名; -``` - -#### 创建表格 - -```mysql -create table 数据表名称( - 字段名 数据类型, - 字段名 数据类型 - ... -); - -示例: -create table teacher( - tid int, - tname varchar(5), - salary double, - weight double(5,2), - birthday date, - gender enum('男','女'), - blood enum('A','B','AB','O'), - tel char(11) -); -``` - -#### 查看表的详细定义信息,即查看建表语句 - -```mysql -show create table 表名称; -``` - -#### 修改数据表编码 - -```mysql -alter table 表名称 convert to character set utf8; -``` - -#### 查看表结构 - -```mysql -desc 表名称; -``` - -#### 删除表格,包括表结构和里面的数据 - -```mysql -drop table 表名称; -``` - -#### 修改表结构:删除字段 - -```mysql -alter table 表名称 drop 【column】 字段名称; -alter table teacher drop column weight; -``` - -#### 修改表结构:增加字段 - -```mysql -alter table 表名称 add 【column】 字段名称 数据类型; -alter table 表名称 add 【column】 字段名称 数据类型 first; -alter table 表名称 add 【column】 字段名称 数据类型 after 另一个字段; - -示例: -alter table teacher add weight double(5,2); -alter table teacher drop column weight; - -alter table teacher add weight double(5,2) first; -alter table teacher drop column weight; - -alter table teacher add weight double(5,2) after salary; -alter table teacher drop column weight; -``` - -#### 修改表结构:修改字段的数据类型 - -```mysql -alter table 表名称 modify 字段名称 新的数据类型; -``` - -#### 修改表结构:修改字段的名称 - -```mysql -alter table 表名称 change 旧字段名称 新的字段名称 新的数据类型; -``` - -#### 修改表结构:修改字段位置 - -```mysql -alter table 表名称 modify 字段名称 数据类型 first; -alter table 表名称 modify 字段名称 数据类型 after 另一个字段; -``` - -#### 修改表名称(重命名表) - -```mysql -alter table 旧表名 rename 【to】 新表名; -rename table 旧表名称 to 新表名称; - -示例: -alter table teacher rename to t_tea; -rename table t_tea to teacher; -``` - -## 添加语句 - -#### (1)添加一条记录到某个表中 - -```mysql -insert into 表名称 values(值列表); #值列表中的值的顺序、类型、个数必须与表结构一一对应 -insert into teacher values(1,'张三',15000,120.5,'1990-5-1','男','O','13789586859'); -``` - -#### (2)添加一条记录到某个表中 - -```mysql -insert into 表名称 (字段列表) values(值列表); #值列表中的值的顺序、类型、个数必须与(字段列表)一一对应 -insert into teacher(tid,tname,salary,phone) values(3,'王五',16000,'15789546586'); -``` - -#### (3)添加多条记录到某个表中 - -```mysql -insert into 表名称 values(值列表),(值列表),(值列表); #值列表中的值的顺序、类型、个数必须与表结构一一对应 -insert into 表名称 (字段列表) values(值列表),(值列表),(值列表); #值列表中的值的顺序、类型、个数必须与(字段列表)一一对应 -insert into teacher (tid,tname,salary,phone) -values(4,'赵六',16000,'15789546586'), -(5,'汪飞',18000,'15789548886'), -(6,'天琪',19000,'15909546586'); -``` - -## 修改语句 - -#### 修改所有行 - -```mysql -update 表名称 set 字段名 = 值, 字段名 = 值; #给所有行修改 -#修改所有人的薪资,都涨了1000 -update teacher set salary = salary + 1000 ; -``` - -#### 修改部分行 - -```mysql -update 表名称 set 字段名 = 值, 字段名 = 值 where 条件; #给满足条件的行修改 -#修改天琪的薪资降低5000 -update teacher set salary = salary-5000 where tname = '天琪'; -``` - -## 删除 - -#### 删除部分行的数据 - -```mysql -delete from 表名称 where 条件; -delete from teacher where tname = '天琪'; -``` - -#### 删除整张表的数据,但表结构留下 - -```mysql -delete from 表名称; -delete from teacher; -``` - -#### 截断表,清空表中的数据,只留有表结构 - -```mysql -truncate 表名称; -truncate teacher; -``` - -truncate表和delete表的区别: - -delete是一条一条删除记录的。如果在事务中,事务提交之前支持回滚。(后面会讲事务) - -truncate是把整个表drop,新建一张,效率更高。就算在事务中,也无法回滚。 - -```mysql -#同学问:是否可以删除salary字段的值,字段留着,值删掉 -#可以实现,但是不是用delete,用update - -#同学问:是否可以删除salary字段,连同字段和这个字段的数据都是删除 -#可以实现,但是不是用delete,用alter table 表名称 drop column 字段名; - -#同学问:只删除某个单元格的值 -#可以实现,但是不是用delete,用update - -``` - -##### 查询 - -~~~mysql -查询字段 -select 字段名[字段名,字段名] from 表名 where 条件 -查询整张表 -select * from 表名称 -~~~ - -##### 约束 - -~~~mysql -1.非空约束:not null非空 null空 -在数据类型后面添加not null表示此字段必填,不能为空 -2.默认约束:default 当你不给值时,系统自动以默认值填充 -在数据类型后添加default值 -3.主键约束:primary key 非空,值不能重复,在一个表中在,只有一个主键,auto_increment为自动递增 -4.外键约束:foreign key(字段名) -CONSTRAINT 表名称 foreign key(字段名) references 表名称(字段名); -唯一:关键字unique key -~~~ - - - -## 第1题 - -1、创建数据库test01_company - -~~~mysql -create database test01_company; -use test01_company; -~~~ - - - -2、创建表格offices - -~~~mysql -create table offices( -officeCode int, -city varchar(30), -address varchar(50), -country varchar(50), -posralCode varchar(25) -); -~~~ - - - -| 字段名 | 数据类型 | -| ---------- | ----------- | -| officeCode | int | -| city | varchar(30) | -| address | varchar(50) | -| country | varchar(50) | -| postalCode | varchar(25) | - -3、创建表格employees - -~~~mysql -create table employees( -empNum int, -lastName varchar(50), -firstName varchar(50), -mobile varchar(25), -code int, -jobTitle varchar(50), -birth date, -Note varchar(255), -Sex varchar(5) -); -~~~ - - - -| 字段名 | 数据类型 | -| ------------- | ---------------------------- | -| empNum | int(11) | -| lastName | varchar(50) | -| firstName | varchar(50) | -| mobile | varchar(25) | -| code | int | -| jobTitle | varchar(50) | -| birth | date | -| Note | varchar(255) | -| Sex | varchar(5) | - -**要求4:**将表employees的mobile字段修改到code字段后面。 - -~~~mysql -alter table employees modify mobile varchar(25) after `code`; -~~~ - - - -**要求5:**将表employees的birth字段改名为birthday; - -~~~mysql -alter table employees change birth birthday date; -~~~ - - - -**要求6:**修改sex字段,数据类型为char(1)。 - -~~~mysql -alter table employees modify sex char(1); -~~~ - - - -**要求7:**删除字段note; - -~~~mysql -alter table employees drop Note; -~~~ - - - -**要求8:**增加字段名favoriate_activity,数据类型为varchar(100); - -~~~mysql -alter table employees add column favoriate_activity varchar(100); -~~~ - - - -**要求9:**将表employees的名称修改为 employees_info - -```mysql -alter table employees rename to employees_info; -``` - - - -## 第2题 - -1、创建数据库test02db - -~~~mysql -create database test02db; -use test02db; -~~~ - - - -2、创建表格pet - -~~~mysql -create table pet( -`name` varchar(20), -`owner`varchar(20), -species varchar(20), -sex char, -birth year, -death year -); -~~~ - - - -| 字段名 | 字段说明 | 数据类型 | -| ------- | -------- | ----------- | -| name | 宠物名称 | varchar(20) | -| owner | 宠物主人 | varchar(20) | -| species | 种类 | varchar(20) | -| sex | 性别 | char(1) | -| birth | 出生日期 | year | -| death | 死亡日期 | year | - -3、添加记录 - -~~~mysql -insert into pet -values - ('Fluffy','harold','Cat','f',2003,2010), - ('CLAWS','gwen','Cat','m',2004,null), - ('Buffy',null,'Dog','f',2009,null), - ('Fang','benny','Dog','m',2000,null), - ('bowser','diane','Dog','m',2003,2009), - ('Chirpy',null,'Bird','f',2008,null); -~~~ - - - -| name | owner | species | sex | birth | death | -| ------ | ------ | ------- | ---- | ----- | ----- | -| Fluffy | harold | Cat | f | 2003 | 2010 | -| Claws | gwen | Cat | m | 2004 | | -| Buffy | | Dog | f | 2009 | | -| Fang | benny | Dog | m | 2000 | | -| bowser | diane | Dog | m | 2003 | 2009 | -| Chirpy | | Bird | f | 2008 | | - -4、 添加字段主人的生日owner_birth。 - -~~~mysql -alter table pet add owner_birth year; -~~~ - - - -5、 将名称为Claws的猫的主人改为kevin - -~~~mysql -update pet set name='kevin' where name='claws'; -~~~ - - - -6、 将没有死的狗的主人改为duck - -~~~mysql -update pet set name='duck' where death -~~~ - - - -7、 查询没有主人的宠物的名字; - -~~~mysql -select name from pet where owner is null; -~~~ - - - -8、 查询已经死了的cat的姓名,主人,以及去世时间; - -~~~mysql -select name,owner,death from pet where death=2010; -~~~ - - - -9、 删除已经死亡的狗 - -~~~mysql -delete from pet where species='dog' and death=2009; -~~~ - - - -10、查询所有宠物信息 - -```sql -select * from pet; - -``` - -## 第3题 - -1、创建数据库:test03_company - -```sql -create database test03_company charset utf8; -``` - -2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - -A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - -```mysql -create table department( -depid int primary key auto_increment, -depname varchar(10), -deinfo varchar(50) -); -``` - -B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - -* ​ 雇员编号为主键; -* ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); -* ​ 性别默认为男; - -```mysql -create table employee( -empid int primary key, -name varchar(10), -sex enum('男','女') not null default'男', -title varchar(10), -birthday date, -depid int, -CONSTRAINT department foreign key(depid) references department(depid) -); -``` - -C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - -~~~mysql -create table salary( -empid int primary key, -basesalary double(5,2), -titlesalary double(5,2), -deduction double(5,2) -); -~~~ - - - - - -3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) - -~~~mysql -alter table salary -add constraint employee -foreign key (empid) -references employee(empid); -~~~ - - - -4、添加数据如下: - -部门表: - -~~~mysql -INSERT INTO department(depid,depname,deinfo) -VALUES -(111,'生产部',NULL), -(222,'销售部',NULL), -(333,'人事部','人力资源管理'); -~~~ - - - -| 部门编号 | 部门名称 | 部门简介 | -| -------- | -------- | ------------ | -| 111 | 生产部 | Null | -| 222 | 销售部 | Null | -| 333 | 人事部 | 人力资源管理 | - - 雇员表: - -~~~mysql -INSERT into employee(empid,`name`,sex,title,birthday,depid) -VALUES -(1001,'张三','男','高级工程师','1975-1-1',111), -(1002,'李四','女','助工','1985-1-1',111), -(1003,'王五','男','工程师','1978-11-11',222), -(1004,'张六','男','工程师','1999-1-1',222); -~~~ - - - -| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | -| -------- | ---- | ---- | ---------- | ---------- | ------------ | -| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | -| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | -| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | -| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | - - 工资表: - -~~~mysql -INSERT INTO salary(empid,basesalary,titlesalary,deduction) -VALUES -(1001,2200,1100,200), -(1002,1200,200,NULL), -(1003,2990,700,200), -(1004,1950,700,150); -~~~ - - - -| 雇员编号 | 基本工资 | 职务工资 | 扣除 | -| -------- | -------- | -------- | ---- | -| 1001 | 2200 | 1100 | 200 | -| 1002 | 1200 | 200 | NULL | -| 1003 | 2900 | 700 | 200 | -| 1004 | 1950 | 700 | 150 | - - - -## 第4题 - -1、创建一个数据库:test04_school - -~~~mysql -create database test04_school; -use test04_school; -alter database test04_school charset utf8; -~~~ - - - -2、创建如下表格 - -表1 Department表的定义 - -~~~mysql -create table department( -depno int primary key not null unique, -depname varchar(20) not null, -depnote varchar(50) -); -alter table department charset utf8; -~~~ - - - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | -| DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | -| DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | - -表2 Teacher表的定义 - -~~~mysql -create table teacher( -number int primary key not null unique, -name varchar(30) not null, -sex varchar(4), -birth date, -depno int, -salary float, -address varchar(100), -CONSTRAINT department foreign key(depno) references department(depno) -); -alter table teacher charset utf8; -~~~ - - - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| Number | 教工号 | int | 是 | 否 | 是 | 是 | -| Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | -| Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | -| Birth | 出生日期 | date | 否 | 否 | 否 | 否 | -| DepNo | 部门号 | int | 否 | 是 | 否 | 否 | -| Salary | 工资 | float | 否 | 否 | 否 | 否 | -| Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | - -3、添加记录 - -~~~mysql -insert into Department -VALUES -(601,'软件技术系','软件技术等专业'), -(602,'网络技术系','多媒体技术等专业'), -(603,'艺术设计系','广告艺术设计等专业'), -(604,'管理工程系','连锁经营管理等专业'); - -insert into Teacher -VALUES -(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'), -(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'), -(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'), -(2004,'James','女','1980-10-20',602,3500,'四川省成都市'), -(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); -~~~ - - - -| **DepNo** | **DepName** | **DepNote** | -| --------- | ----------- | ------------------ | -| 601 | 软件技术系 | 软件技术等专业 | -| 602 | 网络技术系 | 多媒体技术等专业 | -| 603 | 艺术设计系 | 广告艺术设计等专业 | -| 604 | 管理工程系 | 连锁经营管理等专业 | - -| **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | -| ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | -| 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | -| 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | -| 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | -| 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | -| 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | - -4、用SELECT语句查询Teacher表的所有记录。 - -```mysql -select * from teacher; -``` - - - - - diff --git "a/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230223\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246+\347\254\224\350\256\260.md" "b/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230223\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246+\347\254\224\350\256\260.md" deleted file mode 100644 index 7bd489546c1bdf8298d3949cca254830193520e7..0000000000000000000000000000000000000000 --- "a/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230223\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246+\347\254\224\350\256\260.md" +++ /dev/null @@ -1,253 +0,0 @@ -# 笔记 - -select 字段列表 from 表名称; - -select 字段列表 from 表名称 where 条件; - -别名(该临时字段名) - -select 字段名1 as 别名1,字段2 as 别名2 from 表名称 as 别名; - -结果去重 distinct 只支持一个字段 - -select distinct 字段列表 from 表名称 [where 条件] - -运算符 - -div 只保留整数部分 - -例 select 9/2,9 div 2 - -结果4.5,4 - -等于=不能用于null, - -判断是null用is null或用<=>null - -判断不是null 用is not null - -查询信息 - -select * from 表名称 where 字段1 in(字段数据1,字段数据2); - -查询遇到null时 - -select ifnull(字段名,0)from 表名称; - -区间范围 - -字段名 between X and Y 包含两端的边界 - -集合范围(in) - -in(x,x,x) not in(x,x,x)不在此范围 - -查询在这字段的数据 - -select * from 表名称 where 字段名 in(字段数据) - -%代表任意字符 - -_代表一个字符 - -模糊查询用like - -## 第1题:员工表 - -```mysql -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - - - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - -**要求1:**查询出薪资在12000~13000之间的员工信息。 - -~~~mysql -select * from employee where salary between 12000 and 13000; -~~~ - - - -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -~~~mysql -select id,name,addr from employee where name like '刘%'; -~~~ - - - -**要求3:**将“李四”的家庭住址改为“广东韶关” - -~~~mysql -update employee set addr='广东韶关' where name='李四'; -~~~ - - - -**要求4:**查询出名字中带“小”的员工 - -~~~mysql -select * from employee where name like '%小%'; -~~~ - - - -**要求5:**查询出薪资高于11000的男员工信息 - -~~~mysql -select * from employee where salary>11000 and sex='男'; -~~~ - - - -**要求6:**查询没有登记电话号码的员工 - -~~~mysql -select * from employee where tel is null; -~~~ - - - -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -~~~mysql -select * from employee where salary>12000 and sex='男' -or addr in('广东深圳','广东广州') -~~~ - - - -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - -```mysql -select name 姓名,salary*12 年薪 from employee; -``` - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -``` - -**要求1:** 查询大国 的国家名称、人口和面积。 - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -~~~mysql -select * from countries_info where area>='3000000' XOR population>='25000000'; -~~~ - - - -- 面积至少为 300万平方公里(即,3000000 km2) -- 人口至少为 2500 万(即 25000000) - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -~~~mysql -select * from countries_info where continent='Asia'; -~~~ - - - -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -~~~mysql -select * from countries_info where area<10000 and population<100000; -~~~ - - - -**要求4:**查询国家名字中包含“o“字母的国家信息 - -~~~mysql -select * from countries_info where name like '%o%'; -~~~ - - - -**要求5:**查询GDP值超过10000000000的国家信息 - -~~~mysql -select * from countries_info where gdp>10000000000; -~~~ - - - -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -~~~mysql -select name ,population,gdp,gdp/population 人均贡献GDP from countries_info; -~~~ - - - -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - -~~~mysql -select * from countries_info where gdp/population<1000; -~~~ - - - -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -```mysql -select name,area,population,area/population 人均国土面积 from countries_info; -``` - diff --git "a/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230302 \345\207\275\346\225\260\344\273\245\345\217\212\345\205\263\350\201\224.md" "b/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230302 \345\207\275\346\225\260\344\273\245\345\217\212\345\205\263\350\201\224.md" deleted file mode 100644 index bd4f7463d32e6112be55a0f444e0570874d594d2..0000000000000000000000000000000000000000 --- "a/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230302 \345\207\275\346\225\260\344\273\245\345\217\212\345\205\263\350\201\224.md" +++ /dev/null @@ -1,278 +0,0 @@ -# 作业 - -\1. 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。 - -**2.** ***\*数据库的表结构\**** - -表(一)Student (学生表) - -| 属性名 | 数据类型 | 可否为空 | 含义 | -| --------- | ------------ | -------- | ------------ | -| Sno | varchar (20) | 否 | 学号(主码) | -| Sname | varchar (20) | 否 | 学生姓名 | -| Ssex | varchar (20) | 否 | 学生性别 | -| Sbirthday | datetime | 可 | 学生出生年月 | -| Class | varchar (20) | 可 | 学生所在班级 | - -CREATE TABLE `student` ( - - `Sno` varchar(20) NOT NULL, - - `Sname` varchar(20) NOT NULL, - - `Ssex` varchar(20) NOT NULL, - - `Sbirthday` datetime DEFAULT NULL, - - `Class` varchar(20) DEFAULT NULL, - - PRIMARY KEY (`Sno`) - -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - -表(二)Course(课程表) - -| 属性名 | 数据类型 | 可否为空 | 含义 | -| ------ | ------------ | -------- | ---------------- | -| Cno | varchar (20) | 否 | 课程号(主码) | -| Cname | varchar (20) | 否 | 课程名称 | -| Tno | varchar (20) | 否 | 教工编号(外码) | - -表(三)Score(成绩表) - -| 属性名 | 数据类型 | 可否为空 | 含义 | -| -------------- | ------------ | -------- | -------------- | -| Sno | varchar (20) | 否 | 学号(外码) | -| Cno | varchar (20) | 否 | 课程号(外码) | -| Degree | Decimal(4,1) | 可 | 成绩 | -| 主码:Sno+ Cno | | | | - -表(四)Teacher(教师表) - -| 属性名 | 数据类型 | 可否为空 | 含义 | -| --------- | ------------ | -------- | ---------------- | -| Tno | varchar (20) | 否 | 教工编号(主码) | -| Tname | varchar (20) | 否 | 教工姓名 | -| Tsex | varchar (20) | 否 | 教工性别 | -| Tbirthday | datetime | 可 | 教工出生年月 | -| Prof | varchar (20) | 可 | 职称 | -| Depart | varchar (20) | 否 | 教工所在部门 | - -**3.** ***\*数据库中的数据\****: - --- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ - --- 2,查询没有学生的教师的所有信息 - - - - - -表(一)Student - -| Sno | Sname | Ssex | Sbirthday | class | -| ---- | ----- | ---- | --------- | ----- | -| 108 | 曾华 | 男 | 1977-9-1 | 95033 | -| 105 | 匡明 | 男 | 1975-10-2 | 95031 | -| 107 | 王丽 | 女 | 1976-1-23 | 95033 | -| 101 | 李军 | 男 | 1976-2-20 | 95033 | -| 109 | 王芳 | 女 | 1975-2-10 | 95031 | -| 103 | 陆君 | 男 | 1974-6-3 | 95031 | - -表(二)Course - -| Cno | Cname | Tno | -| ----- | ---------- | ---- | -| 3-105 | 计算机导论 | 825 | -| 3-245 | 操作系统 | 804 | -| 6-166 | 数字电路 | 856 | -| 9-888 | 高等数学 | 831 | - -表(三)Score - -| Sno | Cno | Degree | -| ---- | ----- | ------ | -| 103 | 3-245 | 86 | -| 105 | 3-245 | 75 | -| 109 | 3-245 | 68 | -| 103 | 3-105 | 92 | -| 105 | 3-105 | 88 | -| 109 | 3-105 | 76 | -| 101 | 3-105 | 64 | -| 107 | 3-105 | 91 | -| 108 | 3-105 | 78 | -| 101 | 6-166 | 85 | -| 107 | 6-166 | 79 | -| 108 | 6-166 | 81 | - -表(四)Teacher - -| Tno | Tname | Tsex | Tbirthday | Prof | Depart | -| ---- | ----- | ---- | --------- | ------ | ---------- | -| 804 | 李诚 | 男 | 1958-12-2 | 副教授 | 计算机系 | -| 856 | 张旭 | 男 | 1969-3-12 | 讲师 | 电子工程系 | -| 825 | 王萍 | 女 | 1972-5-5 | 助教 | 计算机系 | -| 831 | 刘冰 | 女 | 1977-8-14 | 助教 | 电子工程系 | - -\4. 查询 - -① 查询Score表中的最高分的学生学号和课程号。 - -② 查询所有学生的Sname、Cno和Degree列。 - -③ 查询所有学生的Sno、Cname和Degree列。 - -④ 查询所有学生的Sname、Cname和Degree列。 - -⑤ 查询“95033”班学生的平均分。 - -⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 - -⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 - -⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 - -⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 - -⑩ 查询“张旭“教师任课的学生成绩。 - -⑪ 查询选修某课程的同学人数多于5人的教师姓名。 - -⑫ 查询出“计算机系“教师所教课程的成绩表。 - -⑬ 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 - -⑭ 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 - -⑮ 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. - -⑯ 查询成绩比该课程平均成绩低的同学的成绩表。 - -⑰ 查询所有任课教师的Tname和Depart. - -⑱ 查询所有未讲课的教师的Tname和Depart. - -⑲ 查询“男”教师及其所上的课程。 - -⑳ 查询最高分同学的Sno、Cno和Degree列。 - -21 查询和“李军”同性别的所有同学的Sname. - -22 查询和“李军”同性别并同班的同学Sname. - -23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 - -~~~mysql -create database chass1; -use chass1; -alter database chass1 charset utf8; -alter table Student charset utf8; -alter table Teacher charset utf8; -alter table Course charset utf8; -alter table Score charset utf8; -create table Student( -Sno varchar (20) primary key not null, -Sname varchar (20) not null, -Ssex varchar (20)not null, -Sbirthday datetime null, -Class varchar (20) null -); -create table Teacher( -Tno varchar (20) primary key not null, -Tname varchar (20) not null, -Tsex varchar (20) not null, -Tbirthday datetime null, -Prof varchar (20) null, -Depart varchar (20) not null -); -create table Course( -Cno varchar (20) primary key, -Cname varchar (20) not null, -Tno varchar (20) not null, -constraint Teacher foreign key(Tno) references Teacher(Tno) -); -create table Score( -Sno varchar (20) not null, -Cno varchar (20) not null, -Degree Decimal(4,1) null, -constraint Student foreign key(Sno) references Student(Sno), -constraint Course foreign key(Cno) references Course(Cno) -); -insert into Student values -('108','曾华','男','1977-9-1','95033'), -('105','匡明','男','1975-10-2','95031'), -('107','王丽','女','1976-1-23','95033'), -('101','李军','男','1976-2-20','95033'), -('109','王芳','女','1975-2-10','95031'), -('103','陆君','男','1974-6-3','95031'); -insert into Course(Cno,Cname,Tno) values -('3-105','计算机导论','825'), -('3-245','操作系统','804'), -('6-166','数字电路','856'), -('9-888','高等数学','831'); -insert into Teacher(Tno,Tname,Tsex,Tbirthday,Prof,Depart) values -('804','李诚','男','1958-12-2','副教授','计算机系'), -('856','张旭','男','1969-3-12','讲师','电子工程系'), -('825','王萍','女','1972-5-5','助教','计算机系'), -('831','刘冰','女','1977-8-14','助教','电子工程系'); -insert into Score(Sno,Cno,Degree) values -('103','3-245','86'), -('105','3-245','75'), -('109','3-245','68'), -('103','3-105','92'), -('105','3-105','88'), -('109','3-105','76'), -('101','3-105','64'), -('107','3-105','91'), -('108','3-105','78'), -('101','6-166','85'), -('107','6-166','79'), -('108','6-166','81'); --- 查询Score表中的最高分的学生学号和课程号。 -select sno,cno from score where degree = (select max(degree) from score); --- 查询所有学生的Sname、Cno和Degree列。 -select Sname,Cno,Degree from Score inner join Student on Student.Sno=Score.Sno; --- 查询所有学生的Sno、Cname和Degree列。 -select Sno,Cname,Degree from score inner join course on course.Cno=score.Cno; --- 查询所有学生的Sname、Cname和Degree列。 -select sname,cname,degree from student inner join course inner join score; --- 查询“95033”班学生的平均分。 -select sum(degree)/count(class) from student inner join score on score.Sno=student.Sno where class='95033'; --- 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 -select * from score where Cno='3-105' and degree>(select degree from score where Sno='109' and cno='3-105'); --- 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 - --- 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 -select * from score where cno='3-105' and degree=(select degree from score where sno='109' and cno='3-105'); --- 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 -select sno,sname,Sbirthday from student where Sno='108' and Sbirthday=(select Sbirthday from student where Sno='108' ); --- 查询“张旭“教师任课的学生成绩。 -select degree 成绩,tname 姓名 from course inner join score inner join teacher on course.cno = score.Cno where tname='张旭'; --- 查询选修某课程的同学人数多于5人的教师姓名。 - --- 查询出“计算机系“教师所教课程的成绩表。 -select * from course inner join score on course.Cno=score.Cno inner join teacher on course.Tno=teacher.Tno where Depart='计算机系'; --- 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 - --- 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 - --- 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. -select Cno,Sno,Degree from score where Cno='3-105' and Degree>(select max(Degree) from score where cno='3-245'); --- 查询成绩比该课程平均成绩低的同学的成绩表。 - --- 查询所有任课教师的Tname和Depart. - --- 查询所有未讲课的教师的Tname和Depart. - --- 查询“男”教师及其所上的课程。 -select * from teacher inner join course on teacher.Tno=course.Tno where Tsex='男'; --- 查询最高分同学的Sno、Cno和Degree列。 -select * from score where Degree=(select max(Degree) from score); --- 查询和“李军”同性别的所有同学的Sname. -select * from student where Ssex='男' --- 查询和“李军”同性别并同班的同学Sname. - --- 查询所有选修“计算机导论”课程的“男”同学的成绩表。 - -~~~ - diff --git "a/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230307 \345\255\220\346\237\245\350\257\242+\347\254\224\350\256\260.md" "b/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230307 \345\255\220\346\237\245\350\257\242+\347\254\224\350\256\260.md" deleted file mode 100644 index 813a34a21c8252f4f47c9b8cb8d081cf1cf1b929..0000000000000000000000000000000000000000 --- "a/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230307 \345\255\220\346\237\245\350\257\242+\347\254\224\350\256\260.md" +++ /dev/null @@ -1,115 +0,0 @@ -### 笔记 - -##### 子查询 - -- 嵌套在其他SQL语句中的查询语句。 -- 子查询通常先运行,所以要用()包裹起来。 -- 子查询的运行结果,可以作为其他语句的条件,数据源等。 - -##### 子查询分三种形式 - - select 1 from 2 where 3 - -1.放在select后面 - -2.放在where/having后面 - -3.放在from后面,子查询当做一个临时的表使用,必须要给别名。 - -##### where或having后的子查询,其子查询的结果有三种形式 - -1.单列单个值,可以直接使用比较运算符 - -2.单列多个值,可以使用 in ,not in 进行比较 - -3.单列多个值,可以使用比较运算符,搭配any,all,等关键字与查询结果进行比较 - -##### 子查询结果是单列,可以放在select参与运算,或者是作为字段,也可以放在where / having后当条件。 - -##### 子查询结果是多列,多个值,只能放在from后面当临时表使用,并且必须取别名。 - -### 作业 - -~~~ mysql -create database text1; -use text1; -alter database text1 charset utf8; -alter table stuinfo charset utf8; -alter table stuExam charset utf8; -alter table stuMarks charset utf8; - -create table stuinfo( -stuNO varchar(10) primary key, -stuName varchar(10), -stuSex varchar(5), -stuAge double, -stuAddress varchar(20), -stuSeat int auto_increment unique -); -create table stuExam( -examNo int primary key, -stuNO varchar(10), -writtenExam varchar(10), -labExam double, -foreign key(stuNo) references stuinfo(stuNo) -); -create table stuMarks( -examNO int, -stuID varchar(10), -score double, -foreign key(examNO) references stuExam(examNO) -); -insert into stuinfo values -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'湖北武汉',2), -('s2503','马文才','男',18,'湖南长沙',3), -('s2504','欧阳俊雄','女',21,'湖北武汉',4), -('s2505','梅超风','男',16,'湖北武汉',5), -('s2506','陈旋风','男',19,'美国硅谷',6); -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); -insert into stuMarks values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); --- 1.查询出年龄比班上平均年龄大的学生的信息 -select * from stuinfo where stuAge>(select round(avg(stuAge),2) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -select t.stuNO,t.stuName,t.stuAge,max(score) from stumarks s left join stuinfo t on s.stuID=t.stuNO group by s.stuID; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -select avg(writtenExam+labExam) from stuexam right join stuinfo on stuexam.stuNO=stuinfo.stuNO GROUP BY stuexam.stuNO; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) --- 普通查询 -select * from stuinfo where stusex='男' and stuage>=20; --- 子查询 -select * from stuinfo where stuage=(select stuage from stuinfo where stusex='男' and stuage>=20); --- 5.查询出年龄比所有男生年龄都大的女生的信息 -select stuSex,max(stuAge) from stuinfo where stuSex='女' and stuAge> all(select stuAge from stuinfo where stuSex ='男'); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -select t.stuNO,t.stuName,t.stuAge,max(score) from stumarks s left join stuinfo t on s.stuID=t.stuNO group by s.stuID; --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select * from stuinfo a left join stumarks c on a.stuNO=c.stuID where stuID is NULL; --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select * from stuinfo a left join stumarks c on a.stuNO=c.stuID where a.stuNO not in (select stuID from stumarks group by stuID); --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where score>90; --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where score>(select avg(score) from stumarks) --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) -select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where stumarks.score > any(select score from stumarks where stumarks.stuID='s2501' ) and stuinfo.stuName != '张秋利' --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) -select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where stumarks.score > any(select score from stumarks where stumarks.stuID='s2501' ) and stuinfo.stuName != '张秋利' --- 13.查询班上比所有男生年龄都要大的女生的信息 -select stuSex,max(stuAge) from stuinfo where stuSex='女' and stuAge> all(select stuAge from stuinfo where stuSex ='男'); --- 14.查询出只要比某个男生年龄大的女生的信息 -select * from stuinfo where stusex = '女' and stuage > (select min(stuage) from stuinfo where stusex = '男'); -~~~ - diff --git "a/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230309 \345\244\247\344\275\234\344\270\232\345\244\215\344\271\240.md" "b/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230309 \345\244\247\344\275\234\344\270\232\345\244\215\344\271\240.md" deleted file mode 100644 index 3b1c5bf932829d3980fba6ae849fc1f3f77d5072..0000000000000000000000000000000000000000 --- "a/22 \350\202\226\351\222\237\345\207\257\351\237\251/20230309 \345\244\247\344\275\234\344\270\232\345\244\215\344\271\240.md" +++ /dev/null @@ -1,136 +0,0 @@ -## 作业 - -~~~ mysql - --- 所有题目要求使用SQL语句完成 --- 1. 根据前面提供的表结构和表数据,创建数据库并分别创建这张四张表;并插入相关数据。(提醒:外键 -create database xiaoshuo charset utf8; -use xiaoshuo; -create table author( -author_id int primary key, -- 作家编号 -author_name varchar(20) not null unique, -- 作家姓名 -credits int, -- 积分 -vip_id varchar(20), -- 等级编号 -foreign key(vip_id) references vip(vip_id) -); - -create table vip( -vip_id varchar(20) primary key, -- 等级编号 -vip_name varchar(20) not null unique -- 等级名称 -); - -create table story( -story_id int primary key auto_increment,-- 作品编号 -author_id int, -- 作家编号,外键,关联作家信息表 -type_id varchar(20), -- 类型编号,外键,关键作品类型表 -story_name varchar(50), -- 作品名称 -views_number int, -- 浏览量 -foreign key(author_id) references author(author_id), -foreign key(type_id) references type(type_id) -); - -create table type( -type_id varchar(20) primary key, -- 类型编号,主键 -type_name varchar(20) not null unique -- 类型名称,非空,不能重复 -); -alter table author charset utf8; -alter table vip charset utf8; -alter table story charset utf8; -alter table type charset utf8; - -insert into author values -(1001,'朱逸群',600,'VIP02'), -(1002,'范建',8510,'VIP04'), -(1003,'史珍香 ',981,'VIP02'), -(1004,'范统',2364,'VIP02'), -(1005,'杜子腾',257,'VIP01'), -(1006,'刘产',678,'VIP02'), -(1007,'杜琦燕',438,'VIP03'); -insert into vip values -('VIP01','青铜作家'), -('VIP02','白银作家'), -('VIP03','黄金作家'), -('VIP04','钻石作家'); -insert into story values -(1,1002,'L03','母猪产后与护理师的二三事',6541), -(2,1005,'L04','拖拉机大战蜘蛛侠',563), -(3,1003,'L01','这只小龙虾不正经',8754), -(4,1006,'L04','一个爹爹三个娃',36354), -(5,1006,'L01','皇上滚开本宫只劫财',3674), -(6,1005,'L05','给长城贴瓷砖的小太监',6541), -(7,1003,'L03','不科学御兽',1257), -(8,1005,'L01','镜面管理局',3216), -(9,1004,'L02','关于我成为灭魂师之后 ',1147), -(10,1004,'L05','公子别秀6541',2078); -insert into type values -('L01','玄幻'), -('L02','奇幻'), -('L03','武侠'), -('L04','仙侠'), -('L05','都市'); - --- 请注意建表顺序和插入数据的顺序) (30分) --- 2. 将story 表中的story_name字段类型改成varchar(40) 。(2分) -alter table story modify story_name varchar(40); - --- 3. 在author表中增加一个性别字段 字段名:author_sex,类型:char(10),要求默认值为'男'。 (3分) - -alter table author add author_sex char(10) default '男'; --- 4. 将作家编号为1005、1007的作家性别改为'女' 。(2分) -select * from author; -update author set author_sex='女' where author_id='1005' or author_id='1007'; --- 5. 作家杜子腾,写了一篇名为《拜登夸我很帅》的都市小说,有854个浏览量,请将这条信息插入到story表。(3分) -select * from story; -select * from vip; -select * from type; -insert into story values(11,1005,'L05','拜登夸我很帅',854); --- 6. 《拖拉机大战蜘蛛侠》这篇小说,浏览量涨了100,请更新story表中的相关数据。(2分) -update story set views_number=views_number+100 where story_name='拖拉机大战蜘蛛侠'; -select * from story; --- 7. 请删除story表的中《皇上滚开本宫只劫财》这篇小说相关数据。(2分) -delete from story where story_name='皇上滚开本宫只劫财'; - --- 8. 查询 浏览量大于 8000的小说的作者编号和小说作品名称。(2分) -select story_id,story_name from story where views_number>8000; - --- 9. 查询积分大于1000 并且会员等级高于vip03的作家所有信息。(3分) -select * from author where credits>1000 and vip_id > 'vip03'; - --- 10. 查询姓名以杜字开头的作家的姓名,积分和等级编号。(3分) -select author_name,credits,vip_id from author where author_name like "杜%"; - --- 11. 查询积分在100、1000之间的作家信息,以积分降序排列。 (3分) -select * from author where credits between 100 and 1000 order by credits desc; - --- 12. 查询出小说的总浏览量,最高浏览量,最小浏览量,平均浏览量,给字段用上中文别名。(3分) -select * from story; -select sum(views_number) 总浏览量,max(views_number) 最高浏览量,min(views_number) 最小浏览量,avg(views_number) 平均浏览量 from story; - --- 13. 查询各种等级的作家的平均积分和作家数量,并对查询结果使用中文别名。(3分) -select vip_id 作家等级,avg(credits) 平均积分,count(author_name) 作家数量 from author group by vip_id; --- 14. 查询小说数量大于等于2的分类编号和小说数量。(4分) - --- 15. 查询所有小说中浏览量最少的书的作品编号、作品名称和类型编号、浏览量。(4分) -select story_id 作品编号,story_name 作品名称,type_id 类型编号,views_number 最少浏览量 from story where views_number= -(select min(views_number) from story); - --- 16. 查询积分比刘产高的作者所有信息。(5分) -select * from author where credits>(select credits from author where author_name='刘产'); - --- 17. 查询出哪些白银作家是没有写小说的,显示这些作家的姓名、等级名称。(8分) -select author_name 姓名,vip_name 等级名称 from vip v left join author a on v.vip_id=a.vip_id left join story s on a.author_id=s.author_id where story_id is null and vip_name='白银作家'; - - --- 18. 找出写过作品浏览量大于5000的作家的所有作品中浏览量不到1000的作品信息(8分) -select * from story where author_id =any (select author_id from story where views_number>5000) and views_number<1000; - --- 19. 查询所有小说的小说编号、小说名称、浏览量、分类名称、作者姓名、作者积分、作者等级名称,结果字段要用中文别名,并按浏览量降序排列,如果浏览量一样的,再按积分降序排列。(10分) -select s.story_id 小说编号, s.story_name 小说名称, s.views_number 浏览量, t.type_id 分类名称, a.author_name 作者姓名, a.credits 作者积分, v.vip_name 作者等级 from story s left join type t on s.type_id=t.type_id left join author a on -s.author_id=a.author_id left join vip v on a.vip_id=v.vip_id order by views_number desc,credits desc - - - - - -~~~ - diff --git "a/06 \351\231\210\345\277\227\344\274\237/\345\221\275\344\273\244\350\241\214.md" "b/23 \345\220\264\345\277\227\347\277\224/\345\221\275\344\273\244\345\207\275.md" similarity index 92% rename from "06 \351\231\210\345\277\227\344\274\237/\345\221\275\344\273\244\350\241\214.md" rename to "23 \345\220\264\345\277\227\347\277\224/\345\221\275\344\273\244\345\207\275.md" index 95dc093213945d228a5932afcae390ad2f9e8415..f4517bfb2633cb3df9eb7bb0e0d067342fe2ad55 100644 --- "a/06 \351\231\210\345\277\227\344\274\237/\345\221\275\344\273\244\350\241\214.md" +++ "b/23 \345\220\264\345\277\227\347\277\224/\345\221\275\344\273\244\345\207\275.md" @@ -1,14 +1,14 @@ -### 命令行 +# 命令行 1、查看所有的数据库 -```mysql +``` show databases; ``` 2、创建自己的数据库 -```mysql +``` create database 数据库名 charset utf8; #创建mxdx数据库 @@ -17,7 +17,7 @@ create database mxdx; 3、删除数据库 -```mysql +``` drop database 数据库名; #删除mxdx数据库 @@ -26,7 +26,7 @@ drop database mxdx; 4、使用自己的数据库 -```mysql +``` use 数据库名; #使用mxdx数据库 @@ -37,7 +37,7 @@ use mxdx; 1、查看某个库的所有表格 -```mysql +``` show tables; #要求前面有use语句 show tables from 数据库名; @@ -45,7 +45,7 @@ show tables from 数据库名; 2、创建新的表格 -```mysql +``` create table 表名称( 字段名 数据类型, 字段名 数据类型 @@ -54,7 +54,7 @@ create table 表名称( 说明:如果是最后一个字段,后面就用加逗号,因为逗号的作用是分割每个字段。 -```mysql +``` #创建学生表 create table student( id int, @@ -64,17 +64,14 @@ create table student( 3、查看定义好的表结构 -```mysql -desc 表名称; ``` - -```mysql +desc 表名称; desc student; ``` 4、添加一条记录 -```mysql +``` insert into 表名称 values(值列表); #添加两条记录到student表中 @@ -84,40 +81,31 @@ insert into student values(2,'李四'); 5、查看一个表的数据 -```mysql +``` select * from 表名称; ``` 6、删除表 -```mysql -drop table 表名称; ``` - -```mysql +drop table 表名称; #删除学生表 drop table student; ``` ### 修改表结构:删除字段 -```mysql -alter table 表名称 drop 【column】 字段名称; ``` - -```mysql +alter table 表名称 drop 【column】 字段名称; alter table teacher drop column weight; ``` ### 修改表结构:增加字段 -```mysql +``` alter table 表名称 add 【column】 字段名称 数据类型; alter table 表名称 add 【column】 字段名称 数据类型 first; alter table 表名称 add 【column】 字段名称 数据类型 after 另一个字段; -``` - -```mysql alter table teacher add weight double(5,2); alter table teacher drop column weight; @@ -130,26 +118,26 @@ alter table teacher drop column weight; ### 修改表结构:修改字段的数据类型 -```mysql +``` alter table 表名称 modify 【column】 字段名称 新的数据类型; ``` ### 修改表结构:修改字段的名称 -```mysql +``` alter table 表名称 change 【column】 旧字段名称 新的字段名称 新的数据类型; ``` ### 修改表结构:修改字段位置 -```mysql +``` alter table 表名称 modify 【column】 字段名称 数据类型 first; alter table 表名称 modify 【column】 字段名称 数据类型 after 另一个字段; ``` ### 修改表名称(重命名表) -```mysql +``` alter table 旧表名 rename 【to】 新表名; rename table 旧表名称 to 新表名称; ``` @@ -158,23 +146,20 @@ rename table 旧表名称 to 新表名称; ### (1)添加一条记录到某个表中 -```mysql +``` insert into 表名称 values(值列表); #值列表中的值的顺序、类型、个数必须与表结构一一对应 ``` ### 2)添加一条记录到某个表中 -```mysql +``` insert into 表名称 (字段列表) values(值列表); #值列表中的值的顺序、类型、个数必须与(字段列表)一一对应 ``` ### (3)添加多条记录到某个表中 -```mysql -insert into 表名称 values(值列表),(值列表),(值列表); #值列表中的值的顺序、类型、个数必须与表结构一一对应 ``` - -```mysql +insert into 表名称 values(值列表),(值列表),(值列表); #值列表中的值的顺序、类型、个数必须与表结构一一对应 insert into 表名称 (字段列表) values(值列表),(值列表),(值列表); #值列表中的值的顺序、类型、个数必须与(字段列表)一一对应 ``` @@ -182,23 +167,16 @@ insert into 表名称 (字段列表) values(值列表),(值列表),(值列表); ### 修改所有行 -```mysql -update 表名称 set 字段名 = 值, 字段名 = 值; #给所有行修改 ``` - -```mysql +update 表名称 set 字段名 = 值, 字段名 = 值; #给所有行修改 #修改所有人的薪资,都涨了1000 update teacher set salary = salary + 1000 ; ``` ### 修改部分行 -```mysql -update 表名称 set 字段名 = 值, 字段名 = 值 where 条件; #给满足条件的行修改 ``` - -```mysql +update 表名称 set 字段名 = 值, 字段名 = 值 where 条件; #给满足条件的行修改 #修改天琪的薪资降低5000 update teacher set salary = salary-5000 where tname = '天琪'; -``` - +``` \ No newline at end of file diff --git "a/24 \345\220\264\346\206\266\350\261\252/20230306 \345\244\232\350\241\250\345\205\263\350\201\224\346\237\245\350\257\242.md" "b/24 \345\220\264\346\206\266\350\261\252/20230306 \345\244\232\350\241\250\345\205\263\350\201\224\346\237\245\350\257\242.md" deleted file mode 100644 index 5b70f8b027942ed80866f7a32f086e2003e7ed3d..0000000000000000000000000000000000000000 --- "a/24 \345\220\264\346\206\266\350\261\252/20230306 \345\244\232\350\241\250\345\205\263\350\201\224\346\237\245\350\257\242.md" +++ /dev/null @@ -1,103 +0,0 @@ -```mysql -CREATE DATABASE text charset utf8; -use text; -CREATE table stuinfo( -stuNO VARCHAR(10) primary key, -stuName VARCHAR(10), -stuSex VARCHAR(10), -stuAge VARCHAR(10), -stuAddress VARCHAR(20), -stuSeat INT -); -CREATE table stuExam( -examNo int primary key auto_increment, -stuNO VARCHAR(10), -writtenExam int, -labExam INT -); -CREATE table stuMarks( -examNo int primary key auto_increment, -stuID VARCHAR(10), -score INT -); -alter table stuExam add foreign key (stuNO) references stuinfo(stuNO); -alter table stuMarks add foreign key (examNo) references stuExam(examNo); - - -INSERT into stuinfo VALUES -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'湖北武汉',2), -('s2503','马文才','男',18,'湖南长沙',3), -('s2504','欧阳俊雄','女',21,'湖北武汉',4), -('s2505','梅超风','男',20,'湖北武汉',5), -('s2506','陈旋风','男',19,'美国硅谷',6); - -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); - -INSERT into stuMarks VALUES -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); - - -# 1.查询出年龄比班上平均年龄大的学生的信息 -select * from stuinfo where stuAge>(select avg(stuAge) from stuinfo); - -# 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -select a.stuNO,a.stuName,a.stuSex,max(score) from stuinfo a left join stumarks b on a.stuNO=b.stuID group by stuNO; - -# 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -select a.stuNO,a.stuName,a.stuSex,(b.writtenExam+b.labExam)/2 平均分 from stuinfo a left join stuexam b on a.stuNO=b.stuNO; - -# 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -select * from stuinfo where stuSex='男' and stuAge>=20; - -# 5.查询出年龄比所有男生年龄都大的女生的信息 -select * from stuinfo where stuSex='女' and stuAge>(select max(stuAge) from stuinfo where stuSex='男'); - -# 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -select a.* from stuinfo a, (select stuID from stumarks group by stuID having min(score)>=60) b where a.stuNO=b.stuID; - -# 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select a.* from stuinfo a,(select stuID from stumarks group by stuID) b where a.stuNO=b.stuID; - -# 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select * from stuinfo where stuNO not in(select stuID from stumarks group by stuID); - -# 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -select a.* from stuinfo a,(select stuID from stumarks group by stuID having max(score)>90) b where a.stuNO=b.stuID; - -# 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -select a.* from stuinfo a,(select stuID from stumarks group by stuID having avg(score)>80) b where a.stuNO=b.stuID; - -# 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) -select a.* from -stuinfo a, -(select stuID from stumarks where stuID!='s2501' group by stuID having max(score)>(select max(score) from stumarks where stuID='s2501')) b -where - a.stuNO=b.stuID; - -# 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) -select a.* from -stuinfo a, -(select stuID from stumarks where stuID!='s2501' group by stuID having max(score)>(select min(score) from stumarks where stuID='s2501')) b -where - a.stuNO=b.stuID; - -# 13.查询班上比所有男生年龄都要大的女生的信息 -select * from stuinfo where stuSex='女' and stuAge>(select max(stuAge) from stuinfo where stuSex='男'); - -# 14.查询出只是比某个男生年龄大的女生的信息 -select * from stuinfo where stuSex='女' and stuAge>(select min(stuAge) from stuinfo where stuSex='男'); - - -``` diff --git "a/25 \345\215\242\344\272\250\350\200\200/2.20\345\270\270\347\224\250\345\221\275\344\273\244\344\270\216\344\275\234\344\270\232.md" "b/25 \345\215\242\344\272\250\350\200\200/2.20\345\270\270\347\224\250\345\221\275\344\273\244\344\270\216\344\275\234\344\270\232.md" deleted file mode 100644 index c73153331ac8b84f7c92ea10cf83614547fd1d6c..0000000000000000000000000000000000000000 --- "a/25 \345\215\242\344\272\250\350\200\200/2.20\345\270\270\347\224\250\345\221\275\344\273\244\344\270\216\344\275\234\344\270\232.md" +++ /dev/null @@ -1,187 +0,0 @@ -**使用**cmd命令连接数据库 - -mysql -h 主机名 -P 端口号 -u 用户名 -p密码(中间不能有空格) - -如果是连本机:-h 用户名可以省略,端口号未修改:-P 端口号也可以省略 - -简写成:mysql -u 用户名 -p密码 - -**查看**所有的数据库:show databases: - -**创建**数据库:create database 数据库名; - -**删除**数据库:drop database 数据库名; - -**使用**数据库:use 数据库名; - -**查看**数据库的所有表格:show table from 数据库名; - -**创建**新的表格:create table 表名称( - - 字段名 数据类型, - - 字段名 数据类型 - - ); - -**查看**已定义的表结构:dese 表名称; - -**添加**一条表记录:insert into 表名称 valuse(值列表); - -**查看**一个表的数据:select*from 表名称; - -**删除**表:drop table 表名称; - - - -char(m)为固定长度的字符串,默认储存1个字符,最大存储255 - -例:create table temp( - - c1 char(2) - - ); - - insert into temp valves('数据库');#失败 - -varchar(m)可变长度的字符串,m不可缺省必须指定m - -unsigned声明该数列不允许负数 - -zerofilll不足位数用零来填充(推荐和int一起使用) - -double双精度(适合存储小数) - -float单精度 - -int整数 - -decimal定点数默认是(10,0)四舍五入时5就是5 - -double和float四舍五入时5是无限接近于5 - -float(m,n)m表示限制整数+小数一共只能存放m位的长度 - -如果小数部分长度超过n,自动四舍五入 - -时间类型:date年月日,time时分秒,year年份,datetime日期时间 - -enum枚举类型,类似单选框只能选择其中一个 - -set集合,类似多选框,可以不选也可以选 - - - -if not exists 如果不存在 - -例:如果没有该名称的数据库则创建名为该名称的数据库,否则跳过 - -if existe 如果存在 - -例:如果该数据库存在则删除该数据库否则跳过 - -修改数据库的编码 - -alter database 数据库名 character set 新的数据库名; - -添加一个表字段 - -alter table 表名称 add 字段名 数据类型; - -删除一个字段 - -alter table 表名称 change 旧字段名 新字段名 数据类型; - -修改一个字段的数据类型 - -alter table 表名称 modify 字段名称 新数据类型; - -修改字段的位置顺序 - -alter table 表名称 modify 字段名称 数据类型 after 另一个字段; - -重命名表名称 - -alter table 旧表名称 rename to 新表名称; - -添加指定字段的赋值 - -insert into 表名称(字段列表)values(值列表); - -删除某个列的一行 - -delete from 表名称 where 条件; - -例:delete from stu where sid=777; - -删除列的数据 - -update 表名称 set 列名称=null; - -## 作业 - -```mysql - -第一题 --- 1、创建数据库 -test01_market create database test01_market; use test01_market; --- 2、创建表格 -customers create TABLE customers( - c_num int(11), c_name VARCHAR(50), - c_comtact VARCHAR(50), - c_city VARCHAR(50), - c_birth DATE -); --- **要求3:**将c_contact字段移动到c_birth字段后面 -alter TABLE customers modify c_comtact VARCHAR(50) AFTER c_birth; --- --- **要求4:**将c_name字段数据类型改为 varchar(70) -ALTER TABLE customers MODIFY c_name VARCHAR(70); --- --- **要求5:**将c_contact字段改名为c_phone -ALTER TABLE customers CHANGE c_comtact c_phone VARCHAR(50); --- --- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -ALTER TABLE customers add c_gender CHAR(1); -alter TABLE customers modify c_gender VARCHAR(50) AFTER c_name; --- --- **要求7:**将表名改为customers_info -ALTER TABLE customers rename to customers_info; --- --- **要求8:**删除字段c_city -ALTER TABLE customers_info DROP c_ity; - - -第二题 -create DATABASE test02_library; -USE test02_library; -CREATE table books( -b_id int(11), -b_name varchar(50), -auto VARCHAR(100), -pice FLOAT, -pubdate YEAR, -note varchar(100), -num int(11) -); -DESC books; --- 1、指定所有字段名称插入第一条记录 - NSERT INTO books(b_id,b_name,`authors`,price,pubdate,note,num) VALUES(1,'Tal of AAA','Dickes',23,1995,'novel',11); --- 2、不指定字段名称插入第二记录 -INSERT INTO books VALUES(2,'EmmaT','Jane lura',35,'1993','joke',22); --- 3、同时插入多条记录(剩下的所有记录) -INSERT INTO books(b_id,b_name,`authors`,price,pubdate,note,num) -VALUES(3,'Story of Jane','Jane Tim',40,'2001','novel',0), -(4,'Lovey Day','George Byron',20,'2005','novel',30), -(5,'Old land','Honore Blade',30,'2010','law',0) -(6,'The Battle','Upton Sara',30,'1999','medicine',40), -(7,'Rose Hood','Richard haggard',28,'2008','cartoon',28); --- 4、将小说类型(novel)的书的价格都增加5。 -update books set price = price+5 where note='novel'; --- 5、将名称为EmmaT的书的价格改为40。 -update books set price = 40 where b_name='EmmaT'; --- 6、删除库存为0的记录 -delete from books where num=0; - -``` - diff --git "a/25 \345\215\242\344\272\250\350\200\200/DQL\347\254\224\350\256\260.md" "b/25 \345\215\242\344\272\250\350\200\200/DQL\347\254\224\350\256\260.md" deleted file mode 100644 index 3a8edab90f8f1ccd01e8d885e9a184d2321ef260..0000000000000000000000000000000000000000 --- "a/25 \345\215\242\344\272\250\350\200\200/DQL\347\254\224\350\256\260.md" +++ /dev/null @@ -1,219 +0,0 @@ -## 一. DQL——语法 - -### 1 DQL ——基本查询 - - 查询多个字段 - -~~~sql -select 字段1,字段2,字段3 ... from 表名; #查询指定字段 -select * from 表名; # 查询所有字段 -~~~ - - 设置别名 - -- 列的别名有空格时,请加双引号。**==列的别名==中没有空格时,双引号可以加也可以不加**。 -- ==**表的别名不能加双引号**==,表的别名中间不能包含空格。 -- as大小写都可以,as也完全可以省略。 - -~~~ sql -select 字段1 as 别名1,字段2 as '别名2'... from as 表名; -~~~ - - 去除重复信息 - -~~~ sql -select distinct 字段名 from 表名 【where 条件】; -~~~ - -### 2 DQL ——条件查询 - - 语法 - -~~~ sql -select 字段列表 from 表名 where 条件列表; -#例:select * from emp where age = 88; 查询年龄为88的行数据 -~~~ - - 条件 - - 比较运算符: - - > < >= <= <>或!= - -~~~ sql -select * from emp where age != 88; -#查询年龄不等于88的数据 -~~~ - - between ... and ... :在某个范围之内(含最小,最大值) - -~~~ sql -select * from emp where age between 15 and 20; -#查询年龄在15到20的数据 从小到大 -~~~ - - in(...) :在in之后的列表中的值,多重选择 - -~~~ sql -select * from emp where age in(18,20,40); -~~~ - - like 占位符:模糊匹配(_匹配单个字符,%匹配任意个字符) - -~~~ sql -select * from emp where name like '_ _'; -#查询名字为两个字的员工信息 -select * from emp where idcard like '%x'; #或17个_X -#查询身份证号最后一位是x的员工信息 -~~~ - - is null :默认内容为null的列表 - -~~~sql -select * from emp where 字段名 is null; -#查询该字段内容为null的数据 -~~~ - - 逻辑运算符: - - and 或&&:并且(多个条件同时成立) - -~~~ sql -select * from emp where age >= 15 && <= 20; -#查询年龄在15到20的数据 或and -select * from emp where gender = '女' and age < 25; -~~~ - - or 或 || :或者(多个条件任意一个成立) 多重选择 - -~~~ sql -select * from emp where age = 18 or age =20; -~~~ - - not 或 !:非,不是 - -~~~ sql -select * from emp where 字段名 is not null; -#查询该字段内容不是null的数据 -~~~ - - 补充: - - NULL在mysql中比较和计算都有特殊性,所有的计算遇到的null都是null。 - - 解决方法:ifnull(xx,代替值) 当xx是null时,用代替值计算 - - 实发工资 = 薪资 + 薪资 * 奖金比例 - - salary + salary * ifnull(commission_pct,0) as 实发工资 - -### 作业 - -~~~ sql -## 第1题:员工表 - -mysql -drop table if exists `employee`; -create database test charset utf8; -#创建employee表 -use test; -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - select * from employee; -**要求1:**查询出薪资在12000~13000之间的员工信息。 - select * from employee where salary between 12000 and 13000; -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - select id,name,addr from employee where name like'刘%'; -**要求3:**将“李四”的家庭住址改为“广东韶关” - update employee set addr = '广东韶关' where name = '李四'; -**要求4:**查询出名字中带“小”的员工 - select * from employee where name like '%小%'; -**要求5:**查询出薪资高于11000的男员工信息 - select * from employee where salary > 11000 and sex ='男'; -**要求6:**查询没有登记电话号码的员工 - select * from employee where tel is null; -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - select * from employee where sex ='男' and (salary > 12000 )or(addr in('广东深圳','广东广州')) ; -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - select name '姓名',salary '底薪', salary * 12 '年薪' from employee; - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 -create database test2 charset utf8; -use test2; -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -select * from countries_info - -**要求1:** 查询大国 的国家名称、人口和面积。 - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) - -- 人口至少为 2500 万(即 25000000) - select name,population,area from countries_info where area > 3000000 or population > 25000000; -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - select * from countries_info where continent = 'Asia' ; -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - select * from countries_info where area < 10000 and population < 100000; -**要求4:**查询国家名字中包含“o“字母的国家信息 - select * from countries_info where name like '%o%'; -**要求5:**查询GDP值超过10000000000的国家信息 - select * from countries_info where gdp > 10000000000; -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - select name '国家名', population '人口', gdp 'GDP值',gdp/ population '人均贡献GDP值' from countries_info; -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - select * from countries_info where gdp / population < 1000; -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - select name '国家名',area '面积', population '人口',area/ population '人均国土面积值' from countries_info; -~~~ \ No newline at end of file diff --git "a/25 \345\215\242\344\272\250\350\200\200/\345\244\247\344\275\234\344\270\232.md" "b/25 \345\215\242\344\272\250\350\200\200/\345\244\247\344\275\234\344\270\232.md" deleted file mode 100644 index 42b730a538fb40d68d234b29a9094481db30b04b..0000000000000000000000000000000000000000 --- "a/25 \345\215\242\344\272\250\350\200\200/\345\244\247\344\275\234\344\270\232.md" +++ /dev/null @@ -1,138 +0,0 @@ -# 大作业 - -```mysql -create database test4 CHARSET utf8; -use test4; -create table author( -author_id int primary key, -author_name varchar(20) unique key not null, -credits int, -vip_id varchar(20) not null, - FOREIGN KEY (`vip_id`) REFERENCES `vip` (`vip_id`) -); - -create table vip( -vip_id varchar(20) primary key, -vip_name varchar(20) unique key not null -); - -create table story( -story_id int PRIMARY KEY AUTO_INCREMENT, -author_id int, -type_id varchar(20), -story_name varchar(50), -views_number int, -FOREIGN KEY (`author_id`) REFERENCES `author` (`author_id`), -FOREIGN KEY (`type_id`) REFERENCES `type` (`type_id`) -); - -create table type( -type_id varchar(20) PRIMARY KEY, -type_name varchar(20) unique key not null -); - -insert into author(author_id,author_name,credits,vip_id) VALUES -(1001,'朱逸群',600,'VIP02'), -(1002,'范建',8510,'VIP04'), -(1003,'史珍香',981,'VIP02'), -(1004,'范统',2364,'VIP02'), -(1005,'杜子腾',257,'VIP01'), -(1006,'刘产',677,'VIP02'), -(1007,'杜琦燕',438,'VIP03'); - -insert into vip values -('VIP01','青铜作家'), -('VIP02','白银作家'), -('VIP03','黄金作家'), -('VIP04','钻石作家'); - -insert into story(author_id,type_id,story_name,views_number) values -(1002,'L03','母猪产后与护理师的二三事',6541), -(1005,'L04','拖拉机大战蜘蛛侠',563), -(1003,'L01','这只小龙虾不正经',8754), -(1006,'L04','一个爹爹三个娃',36354), -(1006,'L01','皇上滚开本宫只劫财',3674), -(1005,'L05','给长城贴瓷砖的小太监',6541), -(1003,'L03','不科学御兽',1257), -(1005,'L01','镜面管理局',3216), -(1004,'L02','关于我成为灭魂师之后', 1147), -(1004,'L05','公子别秀',2078); - -insert into type VALUES -('L01','玄幻'), -('L02','奇幻'), -('L03','武侠'), -('L04','仙侠'), -('L05','都市'); - -/*1. 根据前面提供的表结构和表数据,创建数据库并分别创建这张四张表;并插入相关数据。(提醒:外键 -请注意建表顺序和插入数据的顺序) (30分)*/ - --- 2. 将story 表中的story_name字段类型改成varchar(40) 。(2分) -alter table story modify story_name varchar(40); - --- 3. 在author表中增加一个性别字段 字段名:author_sex,类型: char(10),要求默认值为'男'。 (3分) -alter table author add author_sex char(10) DEFAULT '男'; - --- 4. 将作家编号为1005、1007的作家性别改为'女' 。(2分) -update author set author_sex='女' where author_id=1005 or author_id=1007; - --- 5. 作家杜子腾,写了一篇名为《拜登夸我很帅》的都市小说,有854个浏览量,请将这条信息插入到story --- 表。(3分) --- select author.author_id from author where author_name='杜子腾'; --- select type.type_id from type where type_name='都市'; -insert into story(author_id,type_id,story_name,views_number) -values((select author.author_id from author where author_name='杜子腾'), -(select type.type_id from type where type_name='都市'),'拜登夸我很帅',854); - --- 6. 《拖拉机大战蜘蛛侠》这篇小说,浏览量涨了100,请更新story表中的相关数据。(2分) -update story set views_number = views_number +100 where story_name='拖拉机大战蜘蛛侠'; - --- 7. 请删除story表的中《皇上滚开本宫只劫财》这篇小说相关数据。(2分) --- select author_id,type_id,views_number from story where story_name='皇上滚开本宫只劫财'; --- delete author_id,type_id,views_number from story where story_name='皇上滚开本宫只劫财'; -update story set author_id=null,type_id=null,views_number=null where story_name='皇上滚开本宫只劫财'; - --- 8. 查询 浏览量大于 8000的小说的作者编号和小说作品名称。(2分) -select author_id,story_name from story where views_number>8000; - --- 9. 查询积分大于1000 并且会员等级高于vip03的作家所有信息。(3分) -select * from author where vip_id>'vip03' and credits >1000; - --- 10. 查询姓名以杜字开头的作家的姓名,积分和等级编号。(3分) -select author_name,vip_id,credits from author where author_name like '杜%'; - --- 11. 查询积分在100、1000之间的作家信息,以积分降序排列。 (3分) -select * from author where credits between 100 and 1000 ORDER BY credits desc; - --- 12. 查询出小说的总浏览量,最高浏览量,最小浏览量,平均浏览量,给字段用上中文别名。(3分) -select sum(views_number) 总浏览量,max(views_number) 最高浏览量, min(views_number) 最小浏览量,avg(views_number) 平均浏览量 -from story; - --- 13. 查询各种等级的作家的平均积分和作家数量,并对查询结果使用中文别名。(3分) -select vip_id 会员等级,avg(credits) 平均积分, count(vip_id) 作家数量 from author GROUP BY vip_id; - --- 14. 查询小说数量大于等于2的分类编号和小说数量。(4分) -select type_id,count(type_id) 数量 from story GROUP BY type_id HAVING count(type_id)>=2; - --- 15. 查询所有小说中浏览量最少的书的作品编号、作品名称和类型编号、浏览量。(4分) -select type_id,story_name,views_number from story where views_number =(select min(views_number) from story); - --- 16. 查询积分比刘产高的作者所有信息。(5分) -select * from author where credits > - (select credits from author where author_name ='刘产'); - --- 17. 查询出哪些白银作家是没有写小说的,显示这些作家的姓名、等级名称。(8分) -select author_name ,vip_name from author a right join vip v on a.vip_id=v.vip_id where author_id= - (select vip.author_id from story s right join - (select vip_name,author_id from vip v left join author a on v.vip_id=a.vip_id where vip_name='白银作家') vip on s.author_id=vip.author_id where story_id is null); - --- 18. 找出写过作品浏览量大于5000的作家的所有作品中浏览量不到1000的作品信息(8分) -select * from story where author_id in - (select s.author_id from author a right join story s on a.author_id=s.author_id where views_number > 5000) and views_number < 1000; - --- 19. 查询所有小说的小说编号、小说名称、浏览量、分类名称、作者姓名、作者积分、作者等级名称,结果 --- 字段要用中文别名,并按浏览量降序排列,如果浏览量一样的,再按积分降序排列。(10分 -select t.type_id 小说编号,story_name 小说名称,views_number 浏览量, type_name 分类名称,author_name 作者姓名,credits 作者积分,vip_name 作者等级名称 from author a,story s,vip v,type t where a.author_id=s.author_id and a.vip_id=v.vip_id and t.type_id=s.type_id; -``` - diff --git "a/25 \345\215\242\344\272\250\350\200\200/\345\255\220\346\237\245\350\257\242.md" "b/25 \345\215\242\344\272\250\350\200\200/\345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index 32222807efb7ba83118d41118f9ac1cb2af1c734..0000000000000000000000000000000000000000 --- "a/25 \345\215\242\344\272\250\350\200\200/\345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,200 +0,0 @@ -### 7大字句 - -1. from : 从哪些表中筛选 -2. on : 关联多表查询时,去除笛卡尔积 -3. where : 从表中筛选的条件 -4. group by : 分组依据 -5. having:在统计结果中再次筛选 -6. order by: 排序 -7. limit:分页 - -必须按照(1)~(7)的顺序 编写字句 - -**from字句** - -``` -# 1.from 语句 -select * -from t_employee; -``` - -**on字句** - -``` --- (1) on 必须配合 join 使用 --- on 后面只写关联条件 --- 所谓的关联条件 是俩表的关联字段的关系 --- 有n张表关联,就有n-1个关联条件 --- 两张表关联,就有1个关联条件 --- 三张表关联,就有2个关联条件 -SELECT * -FROM t_employee INNER JOIN t_department -ON t_employee.did = t_department.did; -``` - -**where语句** - -``` -# where 子句 在查询结果中筛选 -SELECT * -FROM t_employee INNER JOIN t_department -ON t_employee.did = t_department.did -WHERE gender = '女'; -``` - -**group by** - -``` -group by -- 分组 -``` - -**having语句** - -``` -/*having子句也写条件 -where的条件是针对原表中的记录的筛选。where后面不能出现分组函数。 -having子句是对统计结果(分组函数计算后)的筛选。having可以加分组函数。 -*/ -``` - -**limit语句** - -``` -/*limit子句是用于分页显示结果。 -limit m,n -n:表示最多该页显示几行 -m:表示从第几行开始取记录,第一个行的索引是0 -m = (page-1)*n page表示第几页*/ -``` - -### 子查询 - -子查询 就是嵌套在一个SQL 语句中的查询 SELECT语句可以嵌套在另一个SELECT中,UPDATE,DELETE,INSERT,CREATE语句等。 - -#### select的where或HAVing中嵌套子查询 - -当子查询结果作为外层另一个SQL的过滤条件,通常把子查询嵌入到WHERE或HAVING中。根据子查询结果的情况,分为如下三种情况。 - -- 单列 单个值 可以直接使用比较运算符如 < > <= >= = != 等于子查询结果进行比较 -- 子查询结果为单列 多个值 直接 用 IN 或者 NOT IN -- 单列 单个值 可以直接使用比较运算符如 < > <= >= = != 等于子查询结果进行比较 还可以 搭配 any 、some 、all 等关键字与查询结果进行比较 - -``` -/*在where或having后面的子查询结果是: -(1)单个值,那么可以用=,>,<,>=,<=,!=这样的运算符和子查询的结果做比较 -(2)多个值,那么需要用in,not in, >all,>any....形式做比较 - 如“<”、“<=”、“>”、“>=”、“=”、“!=”等搭配ANY、SOME、ALL等关键字与查询结果进行比较*/ -``` - -**SELECT中的EXISTS型子查询** - -EXISTS型子查询也是存在外层SELECT的WHERE子句中,不过它和上面的WHERE型子查询的工作模式不相同,所以这里单独讨论它。 - -如果EXISTS关键字后面的参数是一个任意的子查询,系统将对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS的结果为false,此时外层查询语句不进行查询。EXISTS和NOT EXISTS的结果只取决于是否返回行,而不取决于这些行的内容,所以这个子查询输入列表通常是无关紧要的。 - -如果EXISTS关键字后面的参数是一个关联子查询,即子查询的WHERE条件中包含与外层查询表的关联条件,那么此时将对外层查询表做循环,即在筛选外层查询表的每一条记录时,都看这条记录是否满足子查询的条件,如果满足就再用外层查询的其他WHERE条件对该记录进行筛选,否则就丢弃这行记录。 - -**SELECT的FROM中嵌套子查询** - -当子查询结果是多列的结果时,通常将子查询放到FROM后面,然后采用给子查询结果取别名的方式,把子查询结果当成一张“动态生成的临时表”使用。 - - - -## 作业 - -``` MySQL -create database test1; -use test1; -create table stuinfo( -stuNO VARCHAR(100), -stuName VARCHAR(100), -stuSex char(5), -stuAge int, -stuAddress VARCHAR(100), -stuSeat int PRIMARY key auto_increment -); - -create table stuExam( -ExamNO int PRIMARY key auto_increment, -stuNO VARCHAR(100), -writtenExam varchar(100), -labExam varchar(100) -); - -create table stuMarks( -ExamNO int PRIMARY key auto_increment, -stuID VARCHAR(100), -score varchar(100) -); -insert into stuinfo (stuNO,stuName,stuSex,stuAge,stuAddress) VALUES -('s2501','张秋利','男',20,'美国硅谷'), -('s2502','李斯文','女',18,'湖北武汉'), -('s2503','马文才','男',18,'湖南长沙'), -('s2504','欧阳俊雄','女',20,'美国硅谷'), -('s2505','梅超风','男',16,'湖北武汉'), -('s2506','陈旋风','男',20,'美国硅谷'); -update stuinfo set stuage=21 where stuno='s2504'; - -insert into stuExam (stuNO,writtenExam,labExam) VALUES -('s2501',50,70), -('s2502',60,65), -('s2503',86,65), -('s2504',40,80), -('s2505',70,85), -('s2506',85,90); - -insert into stumarks (stuID,score) VALUES -('s2501',88), -('s2501',92), -('s2501',53), -('s2502',60), -('s2502',99), -('s2503',82); -1.查询出年龄比班上平均年龄大的学生的信息 --- select avg(stuage) from stuinfo; -- 查询班级平均年龄 -select * from stuinfo where stuage>(select avg(stuage) from stuinfo); - -2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) --- select stuId,max(score) from stumarks GROUP BY stuid; -select stuID,stuname,stusex,b.c 最大分数 from stuinfo a right join (select stuId,max(score) c from stumarks GROUP BY stuid) b on a.stuno=b.stuid; - -3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) - -- select stuno,(writtenExam+labExam)/2 平均分 from stuexam GROUP BY examno; -select a.stuno,stuname,stusex,(writtenExam+labExam)/2 平均分 from stuinfo a LEFT JOIN stuexam b ON a.stuNO=b.stuNO; - -4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -select * from stuinfo where stuage >= 20 and stuSex='男'; -select * from stuinfo where (select * from stuinfo where stuage >= 20 and stuSex='男'); -5.查询出年龄比所有男生年龄都大的女生的信息 -select stusex,max(stuage) from stuinfo GROUP BY stusex; - -6.查询出所有选修课程都及格的学生的信息 (stuMarks) --- select * from stumarks where score>=60; -select * from stuinfo a right join (select * from stumarks where score>=60) b on a.stuno=b.stuid; - -7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -1、select distinct a.* from stuinfo a right join stumarks b on a.stuNO=b.stuID; -2、select distinct a.* from stuinfo a,stumarks b where stuno in(stuid); -8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -1、select a.* from stuinfo a left join stumarks b on a.stuNO=b.stuID where stuno!=all (selet DISTINCT b.stuid from stumarks); -2、select distinct a.* from stuinfo a,stumarks b where stuno in(stuid); -9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) --- select * from stumarks where score>90; -select * from stuinfo a right join (select * from stumarks where score>90) b on a.stuno=b.stuid; -10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) --- select avg(score) from stumarks; -select * from stuinfo where stuno = (select stuid from (select stuid, avg(score) a from stumarks group by stuid) s where a>80); - -11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) -select * from stuinfo a left join stuexam b on a.stuno=b.stuno where writtenexam >(select writtenexam from stuexam where stuno='s2501') and labexam>(select labexam from stuexam where stuno='s2501'); -12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) -select * from stuinfo a left join stuexam b on a.stuno=b.stuno where writtenexam >(select writtenexam from stuexam where stuno='s2501') or labexam>(select labexam from stuexam where stuno='s2501'); -13.查询班上比所有男生年龄都要大的女生的信息 - -- select stuage from stuinfo where stusex='男'; -select * from stuinfo where stuage> all (select stuage from stuinfo where stusex='男') and stusex='女'; -14.查询出只要比某个男生年龄大的女生的信息 -select * from stuinfo where stuage> any (select stuage from stuinfo where stusex='男') and stusex='女'; -``` - - - diff --git "a/25 \345\215\242\344\272\250\350\200\200/\346\237\245\350\257\242\344\275\234\344\270\232.md" "b/25 \345\215\242\344\272\250\350\200\200/\346\237\245\350\257\242\344\275\234\344\270\232.md" deleted file mode 100644 index 848bffecbf209b251f90e66f411fb0c1b5dd9802..0000000000000000000000000000000000000000 --- "a/25 \345\215\242\344\272\250\350\200\200/\346\237\245\350\257\242\344\275\234\344\270\232.md" +++ /dev/null @@ -1,134 +0,0 @@ -``` - - - -create database class2 charset utf8; -use class2; - -CREATE TABLE `student` ( - `Sno` varchar(20) NOT NULL, - `Sname` varchar(20) NOT NULL, - `Ssex` varchar(20) NOT NULL, - `Sbirthday` datetime DEFAULT NULL, - `Class` varchar(20) DEFAULT NULL, - PRIMARY KEY (`Sno`), - KEY `Sname` (`Sname`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE `course` ( - `Cno` varchar(20) NOT NULL, - `Cname` varchar(20) NOT NULL, - `Tno` varchar(20) NOT NULL, - PRIMARY KEY (`Cno`), - KEY `Tn` (`Tno`), - KEY `Cname` (`Cname`), - KEY `Cno` (`Cno`,`Tno`), - CONSTRAINT `Tn` FOREIGN KEY (`Tno`) REFERENCES `teacher` (`Tno`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE `score` ( - `Sno` varchar(20) NOT NULL, - `Cno` varchar(20) NOT NULL, - `Degree` decimal(4,1) DEFAULT NULL, - KEY `Sn` (`Sno`), - KEY `Cn` (`Cno`), - CONSTRAINT `Cn` FOREIGN KEY (`Cno`) REFERENCES `course` (`Cno`), - CONSTRAINT `Sn` FOREIGN KEY (`Sno`) REFERENCES `student` (`Sno`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE `teacher` ( - `Tno` varchar(20) NOT NULL, - `Tname` varchar(20) NOT NULL, - `Tsex` varchar(20) NOT NULL, - `Tbirthday` datetime DEFAULT NULL, - `Prof` varchar(20) DEFAULT NULL, - `Depart` varchar(20) NOT NULL, - PRIMARY KEY (`Tno`), - KEY `Depart` (`Depart`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -insert into Student values -(108,'曾华','男','1977-9-1',95033), -(105,'匡明','男','1975-10-2',95031), -(107,'王丽','女','1976-1-23',95033), -(101,'李军','男','1976-2-20',95033), -(109,'王芳','女','1975-2-10',95031), -(103,'陆君','男','1974-6-3',95031); - -insert into course values -(3-105,'计算机导论',825), -(3-245,'操作系统',804), -(6-166,'数字电路',856), -(9-888,'高等数学',831); - -insert into score values -(103,'3-245',86), -(105,'3-245',75), -(109,'3-245',68), -(103,'3-105',92), -(105,'3-105',88), -(109,'3-105',76), -(101,'3-105',64), -(107,'3-105',91), -(108,'6-180',78), -(101,'6-180',85), -(107,'6-166',79), -(108,'6-166',81); - -insert into teacher values -(804,'李诚','男','1958-12-2','副教授','计算机系'), -(856,'张旭','男','1969-3-12','讲师','电子工程系'), -(825,'王萍','女','1972-5-5','助教','计算机系'), -(831,'刘冰','女','1958-12-2','助教','电子工程系'); - -#1.查询所有学生,都学了哪些课程,要显示学生信息和课程信息 - select * from student,course,score where score.cno = course.Cno and student.sno=score.sno; -#2.查询没有学生的教师的所有信息 - select * from teacher where depart='电子工程系'; -#① 查询Score表中的最高分的学生学号和课程号。 - select sno,cno from score where degree='91'; -#② 查询所有学生的Sname、Cno和Degree列。 - select student.sname,course.cno,score.degree from student, course, score where score.cno = course.Cno and student.sno=score.sno ; -#③ 查询所有学生的Sno、Cname和Degree列。 - select student.Sno,course.cname,score.degree from student, course, score where score.cno = course.Cno and student.sno=score.sno ; -#④ 查询所有学生的Sname、Cname和Degree列。 - select student.sname,course.cname,score.degree from student, course, score where score.cno = course.Cno and student.sno=score.sno ; -#⑤ 查询“95033”班学生的平均分。 - select avg(degree) from score,student where student.sno=score.sno and student.class='95033'; -#⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 - select * from student,score where cno='3-105' and Degree>76 and student.sno=score.sno; - select * from score; -#⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 - -#⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 - select * from student,score where degree>76 and cno='3-105' and student.sno=score.sno; -#⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 - select sno,sname,Sbirthday from student where Sbirthday='1977-9-1'; -#⑩ 查询“张旭“教师任课的学生成绩。 - select sname,cname,degree from student,score,teacher,course where tname='张旭' and student.sno=score.sno and score.cno = course.Cno and teacher.Tno=course.Tno; -#⑪ 查询选修某课程的同学人数多于5人的教师姓名。 - #select tname,count(cno) a from score,teacher, student,course where a>=5 ; -#⑫ 查询出“计算机系“教师所教课程的成绩表。 - select degree,depart from score LEFT JOIN teacher on depart='计算机系' ; -#⑬ 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 - -#⑭ 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 - -#⑮ 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. - -#⑯ 查询成绩比该课程平均成绩低的同学的成绩表。 - -#⑰ 查询所有任课教师的Tname和Depart. - -#⑱ 查询所有未讲课的教师的Tname和Depart. - -#⑲ 查询“男”教师及其所上的课程。 - -#⑳ 查询最高分同学的Sno、Cno和Degree列。 - -#21 查询和“李军”同性别的所有同学的Sname. - -#22 查询和“李军”同性别并同班的同学Sname. - -#23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 -``` \ No newline at end of file diff --git "a/25 \345\215\242\344\272\250\350\200\200/\347\272\246\346\235\237.md" "b/25 \345\215\242\344\272\250\350\200\200/\347\272\246\346\235\237.md" deleted file mode 100644 index 9116e9a532420c870f00ff41762c67195485e18e..0000000000000000000000000000000000000000 --- "a/25 \345\215\242\344\272\250\350\200\200/\347\272\246\346\235\237.md" +++ /dev/null @@ -1,293 +0,0 @@ -## 束 :主键、唯一、非空、默认、自增、外键 - -### 1 主键约束 - - 关键字:primary key - - 特点:每一个表只能有一个主键约束。主键约束的字段值是不允许为null,也不允许重复的 - -```mysql -create table teacher( - tid int primary key, - tname varchar(20) primary key #主键不允许重复定义,会报错 -); -insert into teachar values(1,'张三'); #重复执行会报错 -insert into teachar values(2,'李四'); -insert into teachar values(null,'李五'); #主键不允许为null,会报错 -insert into teachar values(1,'张五'); #主键不允许重复,会报错 -``` - - 复合主键 - -```mysql -create table xuanke( - sid int, - cid int, - score int, - primary key(sid,cid) #它俩的组合不能为NULL,并且唯一 -); -#此时可以重复 -insert into xuanke values(1,1,89); -insert into xuanke values(1,2,96); -insert into xuanke values(2,1,88); -insert into xuanke values(2,2,100); -``` - - 建表后增加主键约束 - -```mysql -alter table 表名称 add primary key(字段列表); -``` - - 如果想要删除主键约束 - -```mysql -alter table 表名称 drop primary key; -``` - - 如果希望某个字段的值,是唯一的,但不要求非空,它也不是主键。 - - 就可以给这样的字段加唯一键约束 - -### 2 唯一键约束 - - 关键字:unique key - - 特点:允许为null,但是不能重复。一个表可以有多个唯一键约束 - -```mysql -create table student( - sid int primary key, - sname varchar(20), - birthday date, - score int, - gender enum('男','女'), - weight double(4,1), - tel char(11) unique key -); -insert into student(sid,sname,tel) values -(1,'张三',NULL), -(2,'李四','10086'); - -insert into student(sid,sname,tel) values -(3,'王五','10086'); -``` - - 建表后增加唯一键约束 - -```mysql -alter table 表名称 add unique key(字段列表); -``` - - 如果要用语句删除唯一键约束 - -```mysql -alter table 表名称 drop index 索引号; -``` - - 如果某个字段,不要求唯一,但是要求非空。那么就可以给字段加非空约束。 - -### 3 非空约束 - -```mysql -CREATE TABLE student( - sid INT PRIMARY KEY, - sname VARCHAR(20), - birthday DATE, - score INT NOT NULL, - gender ENUM('男','女'), - weight DOUBLE(4,1), - tel CHAR(11) UNIQUE KEY -); -#score字段不能为空 -INSERT INTO student(sid,sname,tel) VALUES(3,'王五','10086'); -#正确代码 -INSERT INTO student(sid,sname,score,tel) VALUES(3,'王五',89,'10086'); -``` - -### 4 默认值约束 - -如果某个字段,在添加数据时未指定值时,希望不要用NULL处理,而是按照一个默认值处理, - -就可以使用默认值约束。 - -例如:学生性别,在未指定时,默认按照 男 处理 - -```mysql -CREATE TABLE student( - sid INT PRIMARY KEY, #主键约束 - sname VARCHAR(20) UNIQUE KEY, #唯一键约束 - birthday DATE, - score INT NOT NULL, #非空约束 - gender ENUM('男','女') NOT NULL DEFAULT '男', #非空 + 默认值约束 - weight DOUBLE(4,1), - tel CHAR(11) UNIQUE KEY #唯一键约束 -); -INSERT INTO student(sid,sname,score,tel) - VALUES(1,'张三',89,'10086'); -INSERT INTO student(sid,sname,score,gender,tel) - VALUES(2,'小翠',89,'女','10010'); - - #删除score的非空约束 - ALTER TABLE student MODIFY score INT; - #增加非空约束 - ALTER TABLE student MODIFY score INT NOT NULL; - #删除gender的默认值约束,保留非空约束 - ALTER TABLE student MODIFY gender ENUM('男','女') NOT NULL; - #删除gender的非空约束,保留默认值约束 - ALTER TABLE student MODIFY gender ENUM('男','女') DEFAULT '男'; - #保留非空和默认值约束 - ALTER TABLE student MODIFY gender ENUM('男','女') DEFAULT '男' NOT NULL; -``` - -### 5 检查约束 (MySQL5.7不支持CHECK约束,在MySQL8.0中开始支持CHECK约束) - -```mysql -CREATE TABLE student( - sid INT PRIMARY KEY, #主键约束 - sname VARCHAR(20) , - age INT CHECK (age>=18 && age<=35) -); -INSERT INTO student VALUES(1,'张三',25); -INSERT INTO student VALUES(2,'李四',45); -``` - -### 6 外键约束 - -约束两个表的关系,或者是一个表的两个字段之间的关系。 - -(1)主表(父表)和从表(子表) - - 主表:被依赖,被参考 - - 从表:依赖别人的,参考别人的 - -例如:员工表和部门表 - - 员工表中有一个部门编号字段,它的值是依赖于部门表的部门编号。 - - 员工表是从表。 - - 部门表示主表。 - -```mysql -CREATE TABLE dept( - did INT PRIMARY KEY, - dname VARCHAR(20) -); -CREATE TABLE emp( - eid INT, - ename VARCHAR(20), - deptid INT, -#这里的部门编号可以和dept表中的部门编号名字不一样,但是数据类型和逻辑意义要一样 - FOREIGN KEY (deptid) REFERENCES dept(did) -); -#emp依赖于dept表 -``` - -### 7 自增属性 - -维护某个字段的值自动增长的一个属性。 - -它的要求: - -(1)一个表最多只能有一个字段是自增的 - -(2)自增的字段必须是整数类型 - -(3)自增的字段必须是键约束的字段(通常是主键、唯一键) - - 自增字段赋值为null和0的时候,会自增, - - 如果赋值为其他的值,按照你指定的值来。 - -```mysql -CREATE DATABASE mxdx; -USE mxdx; - -CREATE TABLE stu( - sid INT AUTO_INCREMENT PRIMARY KEY, - sname VARCHAR(20) -); -``` - -错误代码: 1075 - -Incorrect table definition; there can be only one auto column(只能是一个自动列) - -and(并且) it must be defined as a key(必须是键列) - -```mysql -INSERT INTO stu VALUES(NULL,'张三'); -INSERT INTO stu VALUES(NULL,'李四'); -INSERT INTO stu VALUES(0,'王五'); -INSERT INTO stu VALUES(-1,'赵六'); -INSERT INTO stu VALUES(8,'王八'); -INSERT INTO stu VALUES(NULL,'小九'); - -ALTER TABLE 表名称 AUTO_INCREMENT = 起始值; -ALTER TABLE stu AUTO_INCREMENT = 1001; - -INSERT INTO stu VALUES(NULL,'小十'); -INSERT INTO stu VALUES(NULL,'小十1'); - -SHOW CREATE TABLE stu; -``` - -### 作业 - -```mysql -#第一题答案 -create database test01_company charset utf8; -use test01_company; -create table offices( - officeCode int , - city varchar(30) , - address varchar(50) , - country varchar(50) , - postalCode varchar(25) -);create table employees( - empNum int(11), - lastName varchar(50), - firstName varchar(50) , - mobile varchar(25) , - `code` int , - jobTitle varchar(50), - birth date , - Note varchar(255), - Sex varchar(5) -); -alter table employees modify mobile varchar(25) after code; -alter table employees change birth birthday date; -alter table employees modify sex char(1); -alter table employees drop note; -alter table employees add favoriate_activity varchar(100); -alter table employees rename employees_info; - -#第二题答案 -create database test02db charset utf8; -use test02db; -create table pet( - name varchar(20) comment '宠物名称', - owner varchar(20) comment '宠物主人', - species varchar(20) comment '种类', - sex char(1) comment '性别', - birth year comment '出生日期', - death year comment '死亡时间' - ); - insert into pet(name,owner,species,sex,birth,death) -values('Fluffy','harold','Cat','f',2003,2010), -('Claws','gwen','Cat','m',2004,null), -('Buffy',null,' Dog','f',2009,null), -('Fang','benny',' Dog','m',2000,null), -('bowser','diane',' Dog','m',2003,2019), -('Chirpy',null,'Bird ','f',2008,null); -select * from pet; -alter table pet add owner_birth varchar(20); -update pet set owner='kevin' where name='Claws'; -update pet set owner='duck' where death=null; -select * from pet where owner is null; -select * from pet where death = 2010 or death = 2009; -select * from pet where death = null; -select * from pet; -``` \ No newline at end of file diff --git "a/26 \351\231\210\344\275\263\347\202\234/23218\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232\347\254\224\350\256\260.md" "b/26 \351\231\210\344\275\263\347\202\234/23218\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232\347\254\224\350\256\260.md" deleted file mode 100644 index 447b3e2ef430058fd2539c36e58568d31192ed35..0000000000000000000000000000000000000000 --- "a/26 \351\231\210\344\275\263\347\202\234/23218\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232\347\254\224\350\256\260.md" +++ /dev/null @@ -1,247 +0,0 @@ -# 笔记 - -使用cmd命令连接: - -mysql -h主机名 -p端口号 -u用户名 -p密码 - -例如:mysql -h localhost -p 3306 -u root -proot(不能有空格) - -如果是连本机:-h localhost可以省略,端口号未修改: -p3306可以省略 简写成:mysql -u root -p - - - -查看所有的数据库: show databases; - -创建自己的数据库: create database 数据库名;例如:creat database mxdx; - -删除数据库:drop database 数据库名;例如:drop database mxdx; - -使用自己的数据库: use 数据库名; - -查看某个库的所有表格:show tables from 数据库名; - -创建新的表格:create table 表名称( 例如: create table taobao( - -字段名 数据类型, id int, - -字段名 数据类型 name varchar(10)长度 - -); ); - - - -查看已定义的表结构:dese 表名称; - -添加一条记录:insert into 表名称 values(值列表); - -例如:insert into taobao values(1,‘张三’); - -查看一个表的数据:select from 表名称; - -删除表:drop table 表名称; - - - -char(M)为固定长度的字符串,默认存储1个字符。(数据类型) - -例如:create table temp( char最大是255 - -c1 char, - -c2 char(3) - -); - -insert into temp values('桃花岛',‘桃花岛’);#失败 - -insert into temp values(’男‘,’桃花岛‘);#成功 - -varchar(M)为可变长度的字符串,M不可缺省必须指定M - -unsigned 声明该数列不允许负数 - -zerofill 不足为数用0来填充 - - - -double 双精度 int 整数 decimal 小数位 float 单精度 - -decimal 定点数 默认是(10,0)四舍五入时5就是5 - -double和float四舍五入时5是无限接近于5 - -float(M,N)M表示限制整数+小数一共只能存放M位长度,如果小数部分长度超过N,自动四舍五入。 - - - -时间类型:date年月日 time时分秒 year年份 datetime日期时间 - -enum枚举类型,类似单选框中的选项,只能选一个 - -set 集合,类似的选框,可以不选也可以多选 - - - -if not exists 如果不存在 - -例如:create database if not existe class2 charset utf8; - -if existe 如果存在 - -例如:drop database if existe class2; - - - -修改数据库的编码:alter database 数据库名 character set 新的数据库名; - -增加一个表字段 - -alter table 表名称 add 字段名 数据类型; - -删除一个字段 - -alter table 表名称 change 旧字段名称 新字段名称 数据类型; - -修改一个字段的数据类型 - -alter table 表名称 modify 字段名称 新数据类型; - -修改字段的位置顺序 - -alter table 表名称 modify 字段名称 数据类型 after 另一个字段; - -重命名表 - -alter table 表名称 rename to 新名称; - -添加语句,可以指定部分字段赋值 - -insert into 表名称(字段列表) values(值列表); - -删除部分行 - -delete from 表名称 where 条件; - -例如:delete from stu where sid=777; - -删除列的数据 - -update 表名称 set 列名称=null; - -删除列的定义 - -alter table 表名称 drop 列名称 - -# 作业 - -CREATE DATABASE test01_market -use test01_market -CREATE TABLE customers( -c_num int(11), -c_name varchar(50), -c_contact varchar(50), -c_city varchar(50), -c_birth date -); --- 要求3:**将c_contact字段移动到c_birth字段后面 -alter table customers MODIFY c_contact VARCHAR(50) AFTER c_birth; --- 要求4:**将c_name字段数据类型改为 varchar(70) -ALTER TABLE customers MODIFY c_name varchar(70); --- 要求5:**将c_contact字段改名为c_phone -ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); --- 要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -ALTER TABLE customers ADD c_gender char(1) AFTER c_name; --- 要求7:**将表名改为customers_info -ALTER TABLE customers RENAME TO customers_info; --- 要求8:**删除字段c_city -ALTER TABLE customers_info DROP c_city; - - - - - - - - - - - - - - - -CREATE DATABASE test02_library -use test02_library -CREATE TABLE books( -b_id INT(11) NOT NULL UNIQUE, -b_name VARCHAR(50) NOT NULL, -authors VARCHAR(100) NOT NULL, -price FLOAT NOT NULL, -pubdate year NOT NULL, -note VARCHAR(100) NULL, -num int(11) NOT NULL -); -INSERT INTO books (b_id,b_name,authors,price,pubdate,note,num) VALUES (1,'talofaaa','dickes',23,'1995','novel',11); -INSERT INTO books VALUES(2,'EmmaT','Jane lura',35,'1993','joke',22); -INSERT INTO books VALUES(3,'Story of Jane','Jane Tim',40,'2001','novel',0); -INSERT INTO books VALUES(4,'Lovey Day','George Byron',20,'2005','novel',30); -INSERT INTO books VALUES(5,'Old land','Honore Blade',30,'2010','law',0); -INSERT INTO books VALUES(6,'The Battle','Upton Sara',30,'1999','medicine',40); -INSERT INTO books VALUES(7,'Rose Hood','Richard haggard',28,'2008','cartoon',28); -UPDATE books set price=price+5 WHERE note='novel'; -UPDATE books SET price=40 WHERE b_name='EmmaT'; -DELETE from books where num=0; - - - - - - - - - - - - - - - -CREATE DATABASE test03_bookstore -use test03_bookstore -CREATE TABLE book( -id int(11) NO NULL, -title varchar(100) NO NULL, -author varchar(100) NO NULL, -price double(11,2) NO NULL, -sales int(11) NO NULL, -stockint(11) NO NULL, -img_path varchar(100) NO NULL -); -INSERT INTO book VALUES (1,'解忧杂货店','东野圭吾',27.2,102,98,'upload/books/解忧杂货店.jpg'),(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg') -CREATE TABLE users( -id int(11) -unername VARCHAR(100), -password varchar(100), -email varchar(100) -); -INSERT INTO users VALUES (1,'admin','112233','admin@mxdx.com'); -CREATE TABLE orders( -id VARCHAR(100), -order_time datetime, -total_count int(11), -total_amount DOUBLE(11,2), -state int(11), -user_id int(11) -); -INSERT INTO orders VALUES ('15294258455691','2018-06-20 00:30:45',2,50.20,0,1); -CREATE TABLE order_items( -id int(11), -count int(11), -amount double(11,2), -title VARCHAR(100), -author VARCHAR(100), -price DOUBLE(11,2), -img_path VARCHAR(100), -order_id VARCHAR(100) -); -INSERT into order_items values (1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg','15294258455691'),(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg','15294258455691'); \ No newline at end of file diff --git "a/26 \351\231\210\344\275\263\347\202\234/23222\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232\347\254\224\350\256\260.md" "b/26 \351\231\210\344\275\263\347\202\234/23222\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232\347\254\224\350\256\260.md" deleted file mode 100644 index 03fc069f3a455879a3d7067b99e5b3517f662e6a..0000000000000000000000000000000000000000 --- "a/26 \351\231\210\344\275\263\347\202\234/23222\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232\347\254\224\350\256\260.md" +++ /dev/null @@ -1,380 +0,0 @@ -# 笔记 - -非空约束:not null - -默认约束:default 默认值 - -唯一约束:unique key,(值可以为空,但值不能重复) - -主键约束:primary key(默认非空,一个表只能有一个主键约束) - -复合主键primary key(字段名1,字段名2) 表示字段1和字段2的组合是唯一的 - -自增约束(和主键一起使用):auto_increment(不给值或者给0或NULL,会在列表最大值的基础上自增) - -删除唯一约束:alter table 表名称 drop index 索引名 - -删除主键约束:alter table 表名称 drop primary key; - -删除自增约束:alter table 表名称 modify 字段名 数据类型; - -添加自增约束:alter table 表名称 modify 字段名 数据类型 auto_increment; - -外键约束:foreign key - -例:create table 主表名称( - -字段1 数据类型 primary key, - -字段2 数据类型 - -); - -create table 从表名称( - -字段1 数据类型 primary key, - -字段2 数据类型, - -foreign key(从表字段) feferences 主表名(被参考字段) - -); - -从表字段的数据类型必须和主表名(被参考字段)数据类型一样。 - -# 作业 - -第一题 - - - -1、创建数据库test01_company - -CREATE DATABASE text01_company; - -2、创建表格offices - -| 字段名 | 数据类型 | -| ---------- | ------------ | -| officeCode | int | -| city | varchar(30) | -| address | varchar(50) | -| country | varchar(50) | -| postalCode | varchar(25) | - -CREATE TABLE offices( - -officeCode int, - -city varchar(30), - -address varchar(50), - -country varchar(50), - -postalCode varchar(25) - -); - -3、创建表格employees - -| 字段名 | 数据类型 | -| --------- | ------------- | -| empNum | int(11) | -| lastName | varchar(50) | -| firstName | varchar(50) | -| mobile | varchar(25) | -| code | int | -| jobTitle | varchar(50) | -| birth | date | -| Note | varchar(255) | -| Sex | varchar(5) | - -CREATE TABLE employees( - -empNum int(11), - -lastName varchar(50), - -firstName varchar(50), - -mobile varchar(25), - -code int, - -jobTitle varchar(50), - -birth date, - -Note varchar(255), - -Sex varchar(5) - -); - -**要求4:**将表employees的mobile字段修改到code字段后面。 - -ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER `code;` - -**要求5:**将表employees的birth字段改名为birthday; - -ALTER TABLE employees CHANGE mobile birthday date; - -**要求6:**修改sex字段,数据类型为char(1)。 - -ALTER TABLE employees MODIFY sex char(1); - -**要求7:**删除字段note; - -ALTER TABLE employees DROP note; - -**要求8:**增加字段名favoriate_activity,数据类型为varchar(100); - -ALTER TABLE employees add favoriate_activity VARCHAR(100); - -**要求9:**将表employees的名称修改为 employees_info - -ALTER TABLE employees RENAME employees_info; - - - - - -第二题 - - - -1、创建数据库test02db - -CREATE database text02db; - -2、创建表格pet - -| 字段名 | 字段说明 | 数据类型 | -| ------- | -------- | ----------- | -| name | 宠物名称 | varchar(20) | -| owner | 宠物主人 | varchar(20) | -| species | 种类 | varchar(20) | -| sex | 性别 | char(1) | -| birth | 出生日期 | year | -| death | 死亡日期 | year | - -CREATE TABLE pet( - -`name` varchar(20), - -`owner`varchar(20), - -species varchar(20), - -sex char(1), - -birth year, - -death year - -); - -3、添加记录 - -| | | | | | | -| ------ | ------ | ------- | ---- | ----- | ----- | -| name | owner | species | sex | birth | death | -| Fluffy | harold | Cat | f | 2003 | 2010 | -| Claws | gwen | Cat | m | 2004 | | -| Buffy | | Dog | f | 2009 | | -| Fang | benny | Dog | m | 2000 | | -| bowser | diane | Dog | m | 2003 | 2009 | -| Chirpy | | Bird | f | 2008 | | - -INSERT into pet VALUES('Fluffy','harold','Cat','f','2003','2010'),('Claws','gwen','Cat','m','2004','null'),('Buffy','null','Dog','f','2009','null'),('Fang','benny','Dog','f','2009','null'),('bowser','diane','Dog','m','2003','2009'),('Chirpy','null','Bird','f','2008','null'); - - - -4、 添加字段主人的生日owner_birth。 - -ALTER TABLE pet add owner_birth date; - -5、 将名称为Claws的猫的主人改为kevin - -UPDATE pet SET `owner`='kevin' WHERE `name`='Claws'; - -6、 将没有死的狗的主人改为duck - -update pet set `owner`='duck' WHIRE `death`IS NULL; - -7、 查询没有主人的宠物的名字; - -SELECT `name` FROM pet where `owner` IS NULL; - -8、 查询已经死了的cat的姓名,主人,以及去世时间; - -SELECT `name`,`owner`,death from pet where species='Cat'; - -9、 删除已经死亡的狗 - -delete from pet wher species='Dog' and death='2009'; - -10、查询所有宠物信息 - -select * from pet; - - - - - - 第3题 - - - - - -1、创建数据库:test03_company - -create database test03_company charset utf8; - -2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - -A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - -use test03_company ; -create table department( - depid int primary key auto_increment, - depname char(10) not null unique key, - deinfo varchar(200) -); - -B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - -- 雇员编号为主键; -- 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); -- 性别默认为男; -- alter table Teacher convert to character set utf8; - create table employee ( - empid int primary key auto_increment, - name varchar(10) not null, - sex enum('男','女') not null default '男', - title varchar(10), - birthday date, - depid int foreign key references department(depid) - ); - -C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - -3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) - -create table salary( -empid int primary key, -basesalary double, -titlesalary double, -deduction double, -foreign key(empid) references employee(empid) - -); - -、添加数据如下: - -部门表: - -| 部门编号 | 部门名称 | 部门简介 | -| -------- | -------- | ------------ | -| 111 | 生产部 | Null | -| 222 | 销售部 | Null | -| 333 | 人事部 | 人力资源管理 | - -INSERT INTO department(depid,depname,deinfo) VALUES (111,'生产部',NULL),(222,'销售部',NULL),(333,'人事部','人力资源管理'); - -雇员表: - -| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | -| -------- | ---- | ---- | ---------- | ---------- | ------------ | -| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | -| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 1114 | -| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | -| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | - -INSERT into employee(empid,`name`,sex,title,birthday,depid) VALUES(1001,'张三','男','高级工程师','1975-1-1',111),(1002,'李四','女','助工','1985-1-1',111),(1003,'王五','男','工程师','1978-11-11',222),(1004,'张六','男','工程师','1999-1-1',222); - -工资表: - -| 雇员编号 | 基本工资 | 职务工资 | 扣除 | -| -------- | -------- | -------- | ---- | -| 1001 | 2200 | 1100 | 200 | -| 1002 | 1200 | 200 | NULL | -| 1003 | 2900 | 700 | 200 | -| 1004 | 1950 | 700 | 150 | - -INSERT INTO salary(empid,basesalary,titlesalary,deduction) VALUES(1001,2200,1100,200),(1002,1200,200,NULL),(1003,2990,700,200),(1004,1950,700,150); - - - -第4题 - - - -1、创建一个数据库:test04_school - -CREATE DATABASE text04_scgool; - -2、创建如下表格 - -表1 Department表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | -| DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | -| DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | - -CREATE TABLE Department( -DepNo int(10) PRIMARY KEY NOT NULL UNIQUE, -DepName VARCHAR(20) NOT NULL, -DepNote VARCHAR(50) -); - -表2 Teacher表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| Number | 教工号 | int | 是 | 否 | 是 | 是 | -| Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | -| Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | -| Birth | 出生日期 | date | 否 | 否 | 否 | 否 | -| DepNo | 部门号 | int | 否 | 是 | 否 | 否 | -| Salary | 工资 | float | 否 | 否 | 否 | 否 | -| Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | - -create table Teacher( -Number int primary key not null unique, -`Name` varchar(30) not null, -Sex VARCHAR(4), Birth date, -DepNo int, -Salary float, -Address VARCHAR(100), -foreign key(DepNo) references Department(DepNo) -); - -3、添加记录 - -| **DepNo** | **DepName** | **DepNote** | -| --------- | ----------- | ------------------ | -| 601 | 软件技术系 | 软件技术等专业 | -| 602 | 网络技术系 | 多媒体技术等专业 | -| 603 | 艺术设计系 | 广告艺术设计等专业 | -| 604 | 管理工程系 | 连锁经营管理等专业 | - -| **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | -| ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | -| 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | -| 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | -| 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | -| 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | -| 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | - -insert into Department VALUES (601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'),(603,'艺术设计系','广告艺术设计等专业'),(604,'管理工程系','连锁经营管理等专业'); - -insert into Teacher VALUES (2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'),(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'),(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'),(2004,'James','女','1980-10-20',602,3500,'四川省成都市'),(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); - -4、用SELECT语句查询Teacher表的所有记录。 - -select * FROM Teacher; diff --git "a/26 \351\231\210\344\275\263\347\202\234/23223\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232\347\254\224\350\256\260.md" "b/26 \351\231\210\344\275\263\347\202\234/23223\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232\347\254\224\350\256\260.md" deleted file mode 100644 index cc9f3a9918ad61747f00c53b91af1a68e0e92f7f..0000000000000000000000000000000000000000 --- "a/26 \351\231\210\344\275\263\347\202\234/23223\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232\347\254\224\350\256\260.md" +++ /dev/null @@ -1,210 +0,0 @@ -# 笔记 - -select 字段列表 from 表名称; - -select 字段列表 from 表名称 where 条件; - -别名(该临时字段名) - -select 字段名1 as 别名1,字段2 as 别名2 from 表名称 as 别名; - -结果去重 distinct 只支持一个字段 - -select distinct 字段列表 from 表名称 [where 条件] - -运算符 - -div 只保留整数部分 - -例 select 9/2,9 div 2 - -结果4.5,4 - -等于=不能用于null, - -判断是null用is null或用<=>null - -判断不是null 用is not null - -查询信息 - -select * from 表名称 where 字段1 in(字段数据1,字段数据2); - -查询遇到null时 - -select ifnull(字段名,0)from 表名称; - -区间范围 - -字段名 between X and Y 包含两端的边界 - -集合范围(in) - -in(x,x,x) not in(x,x,x)不在此范围 - -查询在这字段的数据 - -select * from 表名称 where 字段名 in(字段数据) - -%代表任意字符 - -_代表一个字符 - -模糊查询用like - -# 作业 - -第一题 - - - -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); - - - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - -**要求1:**查询出薪资在12000~13000之间的员工信息。 - -select * from employee where salary between 12000 and 13000; - -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -select id,name,addr from employee where name like '刘%'; - -**要求3:**将“李四”的家庭住址改为“广东韶关” - -update employee set addr='广东韶关' where name='李四'; - -**要求4:**查询出名字中带“小”的员工 - -select * from employee where name like '%小%'; - -**要求5:**查询出薪资高于11000的男员工信息 - -select * from employee where salary > 11000; - -**要求6:**查询没有登记电话号码的员工 - -select * from employee where tel is null; - -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -select * from employee where (salary >12000 or addr='广东深圳' or addr='广东广州') and sex ='男'; - -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - -select name as 姓名,salary * 12 as 年薪 from employee; - - - - - -第二题 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); - -表数据样例: - -+-------------+-----------+---------+------------+--------------+ - -| name | continent | area | population | gdp | -| ---- | --------- | ---- | ---------- | ---- | -| | | | | | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| ----------- | ---- | ------ | -------- | ----------- | -| | | | | | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| ------- | ------ | ----- | ------- | ----------- | -| | | | | | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| ------- | ------ | ------- | -------- | ------------ | -| | | | | | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| ------- | ------ | ---- | ----- | ---------- | -| | | | | | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -| ------ | ------ | ------- | -------- | ------------ | -| | | | | | -+-------------+-----------+---------+------------+--------------+ - -要求1:** 查询大国 的国家名称、人口和面积。 - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) - -- 人口至少为 2500 万(即 25000000) - -- select `name`,area,population from `countries_info` where area>=3000000 or population>=25000000; - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -select * from `countries_info` where continent='Asia'; - -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -select * from `countries_info` where area<10000 and population<100000; - -**要求4:**查询国家名字中包含“o“字母的国家信息 - -select * from `countries_info` where `name` like '%o%'; - -**要求5:**查询GDP值超过10000000000的国家信息 - -select * from `countries_info` where gdp>10000000000; - -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -select `name`,population,gdp,gdp div population as 人均贡献GDP值 from `countries_info`; - -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - -select * from `countries_info` where (gdp div population)<1000; - -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -```mysql -select name as 国家名,area as 面积,population as 人口,area / population as 人均国土面积值 from countries_info; -``` - diff --git "a/26 \351\231\210\344\275\263\347\202\234/23302\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232\347\254\224\350\256\260.md" "b/26 \351\231\210\344\275\263\347\202\234/23302\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232\347\254\224\350\256\260.md" deleted file mode 100644 index 7c4e403c3a179333b6bb17e4b6c99ea3ae504e5f..0000000000000000000000000000000000000000 --- "a/26 \351\231\210\344\275\263\347\202\234/23302\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232\347\254\224\350\256\260.md" +++ /dev/null @@ -1,119 +0,0 @@ -# 笔记 - -Avg()平均值 Sum()求和 Max()最大值 - -Min()最小值 count()统计记录器 - -count(*)统计全部,count*(字段)统计非null的值 - -关联查询 - -内连接:a inner join b on a.字段=b.字段 ab相同数据 - -左全连接:a left join b on a.字段=b.字段 where a.字段 is null 不重复的a数据 - -右全连接:a right join b on a.字段=b.字段 where b.字段 is null 不重复的b数据 - -左连接:a left join b on a.字段=b.字段 全a数据 - -右连接:a right join b on a.字段=b.字段 全b数据 - -# 作业 - -\1. 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。 - -``` -create database glcx charset utf8; -use glcx; -create table Student( -Sno varchar (20) not null primary key, -Sname varchar (20) not null, -Ssex varchar (20) not null, -Sbirthday datetime, -Class varchar (20) -); -create table Course( -Cno varchar (20) not null primary key, -Cname varchar (20) not null, -Tno varchar (20) not null, -foreign key(Tno) references Teacher(Tno) -); -create table Score( -Sno varchar (20) not null, -foreign key(Sno) references Student(Sno), -Cno varchar (20), -foreign key(Cno) references Course(Cno), -Degree Decimal(4,1) -); -create table Teacher( -Tno varchar (20) not null primary key, -Tname varchar (20) not null, -Tsex varchar (20) not null, -Tbirthday datetime, -Prof varchar (20), -Depart varchar (20) not null -); -insert into Student values -(108,'曾华','男','1977-9-1',95033), -(105,'匡明','男','1975-10-2',95031), -(107,'王丽','女','1976-1-23',95033), -(101,'李军','男','1976-2-20',95033), -(109,'王芳','女','1975-2-10',95031), -(103,'陆君','男','1974-6-3',95031); -insert into Course VALUES -('3-105','计算机导论',825), -('3-245','操作系统',804), -('6-166','数字电路',856), -('9-888','高等数学',831); -insert into Score VALUES -(103,'3-245',86), -(105,'3-245',75), -(109,'3-245',68), -(103,'3-105',92), -(105,'3-105',88), -(109,'3-105',76), -(101,'3-105',64), -(107,'3-105',91), -(108,'3-105',78), -(101,'6-166',85), -(107,'6-166',79), -(108,'6-166',81); -insert into Teacher VALUES -(804,'李诚','男','1958-12-2','副教授','计算机系'), -(856,'张旭','男','1969-3-12','讲师','电子工程系'), -(825,'王萍','女','1972-5-5','助教',' 计算机系'), -(831,'刘冰','女','1977-8-14','助教',' 电子工程系'); -``` - -**1.** ***\*数据库中的数据\****: - --- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ - -``` -select * from Student inner join Score inner join Course on -Student.Sno=Score.Sno and Score.Cno=Course.Cno; -``` - -① 查询“95033”班学生的平均分。 - -``` -select round(sum(Degree) / count(Class),1) 成绩 from Student inner join Score on -Score.Sno=Student.Sno where Class='95033'; -``` - -① 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 - -``` -select * from Student inner join Score inner join Course on -Student.Sno=Score.Sno and Score.Cno=Course.Cno where -(Score.Sno='109')(select round(avg(stuAge),2) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -select t.stuNO,t.stuName,t.stuAge,max(score) from stumarks s left join stuinfo t on s.stuID=t.stuNO group by s.stuID; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -select avg(writtenExam+labExam) from stuexam right join stuinfo on stuexam.stuNO=stuinfo.stuNO GROUP BY stuexam.stuNO; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) --- 普通查询 -select * from stuinfo where stusex='男' and stuage>=20; --- 子查询 -select * from stuinfo where stuage=(select stuage from stuinfo where stusex='男' and stuage>=20); --- 5.查询出年龄比所有男生年龄都大的女生的信息 -select stuSex,max(stuAge) from stuinfo where stuSex='女' and stuAge> all(select stuAge from stuinfo where stuSex ='男'); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -select t.stuNO,t.stuName,t.stuAge,max(score) from stumarks s left join stuinfo t on s.stuID=t.stuNO group by s.stuID; --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select * from stuinfo a left join stumarks c on a.stuNO=c.stuID where stuID is NULL; --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select * from stuinfo a left join stumarks c on a.stuNO=c.stuID where a.stuNO not in (select stuID from stumarks group by stuID); --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where score>90; --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where score>(select avg(score) from stumarks) --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) -select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where stumarks.score > any(select score from stumarks where stumarks.stuID='s2501' ) and stuinfo.stuName != '张秋利' --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) -select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where stumarks.score > any(select score from stumarks where stumarks.stuID='s2501' ) and stuinfo.stuName != '张秋利' --- 13.查询班上比所有男生年龄都要大的女生的信息 -select stuSex,max(stuAge) from stuinfo where stuSex='女' and stuAge> all(select stuAge from stuinfo where stuSex ='男'); --- 14.查询出只要比某个男生年龄大的女生的信息 -select * from stuinfo where stusex = '女' and stuage > (select min(stuage) from stuinfo where stusex = '男'); -~~~ - diff --git "a/26 \351\231\210\344\275\263\347\202\234/23310\347\254\254\345\205\255\346\254\241\344\275\234\344\270\232.md" "b/26 \351\231\210\344\275\263\347\202\234/23310\347\254\254\345\205\255\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index 2383919c7ce2f5e2ca4d0af36f1198843608d4a8..0000000000000000000000000000000000000000 --- "a/26 \351\231\210\344\275\263\347\202\234/23310\347\254\254\345\205\255\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,117 +0,0 @@ -CREATE database xiaoshuo charset utf8; -use xiaoshuo; -CREATE TABLE `author` ( - `author_id` int(11) NOT NULL, - `author_name` varchar(20) NOT NULL, - `credits` int(11) DEFAULT NULL, - `vip_id` varchar(20) NOT NULL, - PRIMARY KEY (`author_id`), - KEY `vip_id` (`vip_id`), - CONSTRAINT `author_ibfk_1` FOREIGN KEY (`vip_id`) REFERENCES `vip` (`vip_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -CREATE TABLE `vip` ( - `vip_id` varchar(20) NOT NULL, - `vip_name` varchar(20) NOT NULL, - PRIMARY KEY (`vip_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -CREATE TABLE `story` ( - `story_id` int(11) NOT NULL AUTO_INCREMENT, - `author_id` int(11) DEFAULT NULL, - `type_id` varchar(20) DEFAULT NULL, - `story_name` varchar(50) DEFAULT NULL, - `views_number` int(11) DEFAULT NULL, - PRIMARY KEY (`story_id`), - KEY `author_id` (`author_id`), - KEY `type_id` (`type_id`), - CONSTRAINT `story_ibfk_1` FOREIGN KEY (`author_id`) REFERENCES `author` (`author_id`), - CONSTRAINT `story_ibfk_2` FOREIGN KEY (`type_id`) REFERENCES `type` (`type_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -CREATE TABLE `type` ( - `type_id` varchar(20) NOT NULL, - `type_name` varchar(20) NOT NULL, - PRIMARY KEY (`type_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -INSERT into author VALUES -(1001,'朱逸群',600,'VIP02'), -(1002,'范建',8510,'VIP04'), -(1003,'史珍香',981,'VIP02'), -(1004,'范统',2364,'VIP02'), -(1005,'杜子腾',257,'VIP01'), -(1006,'刘产',678,'VIP02'), -(1007,'杜琦燕',438,'VIP03'); -INSERT into vip VALUES -('VIP01','青铜作家'), -('VIP02','白银作家'), -('VIP03','黄金作家'), -('VIP04','钻石作家'); -INSERT into story VALUES -(1,1002,'L03','母猪产后与护理师的二三事',6541), -(2,1005,'L04','拖拉机大战蜘蛛侠',563), -(3,1003,'L01','这只小龙虾不正经',8754), -(4,1006,'L04','一个爹爹三个娃',36354), -(5,1006,'L01','皇上滚开本宫只劫财 ',3674), -(6,1005,'L05','给长城贴瓷砖的小太监',6541), -(7,1003,'L03','不科学御兽',1257), -(8,1005,'L01','镜面管理局',3257), -(9,1004,'L02','关于我成为灭魂师之后',1147), -(10,1004,'L05','公子别秀',2078); -INSERT into type VALUES -('L01','玄幻'), -('L02','奇幻'), -('L03','武侠'), -('L04','仙侠'), -('L05','都市'); --- 1. 根据前面提供的表结构和表数据,创建数据库并分别创建这张四张表;并插入相关数据。(提醒:外键 --- 请注意建表顺序和插入数据的顺序) (30分) - --- 2. 将story 表中的story_name字段类型改成varchar(40) 。(2分) -alter table story modify story_name varchar(40); --- 3. 在author表中增加一个性别字段 字段名:author_sex,类型: char(10),要求默认值为'男'。 (3分) -alter table author add author_sex char(10) default '男'; --- 4. 将作家编号为1005、1007的作家性别改为'女' 。(2分) -update author set author_sex='女' where author_id='1005' or author_id='1007'; --- 5. 作家杜子腾,写了一篇名为《拜登夸我很帅》的都市小说,有854个浏览量,请将这条信息插入到story --- 表。(3分) -INSERT INTO story VALUES(11,1005,'L05','拜登夸我很帅',854); --- 6. 《拖拉机大战蜘蛛侠》这篇小说,浏览量涨了100,请更新story表中的相关数据。(2分) -UPDATE story set views_number=views_number+100 where story_name='拖拉机大战蜘蛛侠'; --- 7. 请删除story表的中《皇上滚开本宫只劫财》这篇小说相关数据。(2分) -delete from story where story_name='皇上滚开本宫只劫财'; --- 8. 查询 浏览量大于 8000的小说的作者编号和小说作品名称。(2分) -select story_id,story_name from story where views_number>8000; --- 9. 查询积分大于1000 并且会员等级高于vip03的作家所有信息。(3分) -select * from author where credits>1000 and vip_id > 'vip03'; --- 10. 查询姓名以杜字开头的作家的姓名,积分和等级编号。(3分) -select author_name,credits,vip_id from author where author_name like "杜%"; --- 11. 查询积分在100、1000之间的作家信息,以积分降序排列。 (3分)select * from author where credits between 100 and 1000 order by credits desc; - --- 12. 查询出小说的总浏览量,最高浏览量,最小浏览量,平均浏览量,给字段用上中文别名。(3分)select sum(views_number) 总浏览量,max(views_number) 最高浏览量,min(views_number) 最小浏览量,avg(views_number) 平均浏览量 from story; - --- 13. 查询各种等级的作家的平均积分和作家数量,并对查询结果使用中文别名。(3分)select vip_id 作家等级,avg(credits) 平均积分,count(author_name) 作家数量 from author group by vip_id; - --- 14. 查询小说数量大于等于2的分类编号和小说数量。(4分) - -SELECT author_id,count(author_id) a from story GROUP BY author_id HAVING a>=2; - --- 15. 查询所有小说中浏览量最少的书的作品编号、作品名称和类型编号、浏览量。(4分) - -select story_id 作品编号,story_name 作品名称,type_id 类型编号,views_number 最少浏览量 from story where views_number= -(select min(views_number) from story); - --- 16. 查询积分比刘产高的作者所有信息。(5分) - -select * from author where credits>(select credits from author where author_name='刘产'); - --- 17. 查询出哪些白银作家是没有写小说的,显示这些作家的姓名、等级名称。(8分) - -select author_name 姓名,vip_name 等级名称 from vip v left join author a on v.vip_id=a.vip_id left join story s on a.author_id=s.author_id where story_id is null and vip_name='白银作家'; - --- 18. 找出写过作品浏览量大于5000的作家的所有作品中浏览量不到1000的作品信息(8分) - -select * from story where author_id =any (select author_id from story where views_number>5000) and views_number<1000; - --- 19. 查询所有小说的小说编号、小说名称、浏览量、分类名称、作者姓名、作者积分、作者等级名称,结果 --- 字段要用中文别名,并按浏览量降序排列,如果浏览量一样的,再按积分降序排列。(10分 - -select s.story_id 小说编号, s.story_name 小说名称, s.views_number 浏览量, t.type_id 分类名称, a.author_name 作者姓名, a.credits 作者积分, v.vip_name 作者等级 from story s left join type t on s.type_id=t.type_id left join author a on -s.author_id=a.author_id left join vip v on a.vip_id=v.vip_id order by views_number desc,credits desc \ No newline at end of file diff --git "a/29 \350\267\257\347\216\262/20230219 MySQL\347\232\204\350\277\220\347\224\250.md" "b/29 \350\267\257\347\216\262/20230219 MySQL\347\232\204\350\277\220\347\224\250.md" deleted file mode 100644 index adba08ca953f8ad4f4db0d272bc192e4dc64d3c5..0000000000000000000000000000000000000000 --- "a/29 \350\267\257\347\216\262/20230219 MySQL\347\232\204\350\277\220\347\224\250.md" +++ /dev/null @@ -1,433 +0,0 @@ -# MySQL - -第4章 SQL语句 - -SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。 - -**4.1 SQL****的分类** - -| **名称** | **解释** | **命令** | -| --------------------- | --------------------------------------------- | ------------------------------------------------------------ | -| DDL (数据定义语言) | 定义和管理数据对象结构,如数据库,数据表等 | 创建(create),修改(alter),删除(drop) show(展示)结构 | -| DML (数据操作语言) | 用于操作数据库对象中所包含的数据 | 增(insert),删(delete),改(update) 数据 | -| DQL (数据查询语言) | 用于查询数据库数据 | 查(select) | -| DCL (数据控制语 言) | 用于管理数据库的语言,包括管理权限及数 据更改 | grant(授权),commit(确认),rollback(回滚) | - -其他语句:USE语句,SHOW语句,SET语句等。这类的官方文档中一般称为命令。 - -**4.2 SQL****语法规范** - -(1)mysql的sql语法不区分大小写 - -(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 - -(3)建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) - -(4)数据库和表名、字段名等对象名中间不要包含空格 - -(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名 - -**4.3 SQL****脚本中如何加注释** - -SQL脚本中如何加注释 - -- 单行注释:#注释内容(mysql特有的) -- 单行注释:--空格注释内容 其中--后面的空格必须有 -- 多行注释:/* 注释内容 */ - -**4.4 mysql****脚本中的标点符号** - -mysql脚本中标点符号的要求如下: - -1. 本身成对的标点符号必须成对,例如:(),'',""。 -2. 所有标点符号必须英文状态下半角输入方式下输入。 - -几个特殊的标点符号: - -1. 小括号(): - -2. - 在创建表、添加数据、函数使用、子查询、计算表达式等等会用()表示某个部分是一个整体结构。 - - 思考: 2+3 * 6 =20 和 (2+3) * 6 =30的区别 - -3. 单引号'':**字符串和日期类型的数据值使用单引号''引起来**,数值类型的不需要加标点符号。 - -4. “2023-10--10” - -5. 双引号"":列的别名可以使用引号"",**给表名取别名不要用引号**。 - -6. 在MySQL中双引号通常等价于单引号 - -cr - -第5章 MySQL支持的数据类型 - -**5.1** **数值类型:包括整数和小数** - -数值类型主要用来存储数字,不同的数值类型提供不同的取值范围,可以存储的值范围越大,所需要的存储空间也越大。 - -对于MySQL中的数值类型,还要做如下说明: - -- 关键字INT是INTEGER的同义词。 -- 关键字DEC和FIXED是DECIMAL的同义词。 - -**5.1.1** **整数类型** - - - -**说明:** - -对于整数类型,MySQL还支持在类型名称后面加小括号(M),而小括号中的M表示显示宽度,M的取值范围是(0, 255)。int(M)这个M在字段的属性中指定了unsigned(无符号)和zerofill(零填充)的情况下才有意义。表示当整数值不够M位时,用0填充。如果整数值超过M位但是没有超过当前数据类型的范围时,就按照实际位数存储。当M宽度超过当前数据类型可存储数值范围的最大宽度时,也是以实际存储范围为准。 - -\# - -**5.1.2** **小数类型** - -MySQL中使用浮点数和定点数来表示小数。 - -浮点数有两种类型:单精度浮点数(FLOAT)和双精度浮点数(DOUBLE),定点数只有DECIMAL。浮点数和定点数都可以用(M,D)来表示。 - -- M是精度,表示该值总共显示M位,包括整数位和小数位,对于FLOAT和DOUBLE类型来说,M取值范围为0~255,而对于DECIMAL来说,M取值范围为0~65。 -- D是标度,表示小数的位数,取值范围为0~30,同时必须<=M。 - -DECIMAL实际是以字符串形式存放的,在对精度要求比较高的时候(如货币、科学数据等)使用DECIMAL类型会比较好。浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围,它的缺点是会引起精度问题。 - -**5.2** **字符串类型** - -MySQL的字符串类型有CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET等。MySQL的字符串类型可以用来存储文本字符串数据,还可以存储二进制字符串。 - -文本字符串类型: - -二进制字符串类型: - -**1****、****CHAR(M)****为固定长度的字符串** - -CHAR(M)为固定长度的字符串, M表示最多能存储的字符数,取值范围是0~255个字符,如果未指定(M)表示只能存储1个字符。例如CHAR(4)定义了一个固定长度的字符串列,其包含的字符个数最大为4,如果存储的值少于4个字符,右侧将用空格填充以达到指定的长度,当查询显示CHAR值时,尾部的空格将被删掉。 - -**2****、****VARCHAR(M)****为可变长度的字符串** - -- M表示最多能存储的字符数,最大范围由字符集及M共同决定 -- M不可缺省,必须指定(M),否则报错。 -- 实际长度达不到M值时,以实际长度为准。 -- VARBINARY类型的数据除了存储数据本身外,还需要1或2个字节来存储数据的字节数。 - -c - -**使用场景**: - -- 身份证号、手机号码、QQ号、用户名username、密码password、银行卡号等固定长度的文本字符串适合使用CHAR类型; -- 评论、朋友圈、微博不定长度的文本字符串更适合使用VARCHAR类型。 - -**5.3** **日期时间类型** - -- 如果仅仅是表示年份信息,可以只使用YEAR类型,这样更节省空间,格式为“YYYY”,例如“2022”。YEAR允许的值范围是1901~2155。 -- 如果要表示年月日,可以使用DATE类型,格式为“YYYY-MM-DD”,例如“2022-02-04”。 -- 如果要表示时分秒,可以使用TIME类型,格式为“HH:MM:SS”,例如“10:08:08”。 -- 如果要表示年月日时分秒的完整日期时间,可以使用DATATIME类型,格式为“YYYY-MM-DD HH:MM:SS”,例如“2022-02-04 10:08:08”。 -- 如果需要经常插入或更新日期时间为系统日期时间,则通常使用TIMESTAMP类型,格式为“YYYY-MM-DD HH:MM:SS”,例如“2022-02-04 10:08:08”。TIMESTAMP与DATETIME的区别在于TIMESTAMP的取值范围小,只支持1970-01-01 00:00:01 UTC至2038-01-19 03:14:07 UTC范围的日期时间值,其中UTC是世界标准时间,并且TIMESTAMP类型的日期时间值在存储时会将当前时区的日期时间值转换为时间标准时间值,检索时再转换回当前时区的日期时间值,这会更友好。而DATETIME则只能反映出插入时当地的时区,其他时区的人查看数据必然会有误差的。另外,TIMESTAMP的属性受MySQL版本和服务器SQLMode的影响很大。 - -**5.4 Enum****和****Set****类型** - -无论是数值类型、日期类型、普通的文本类型,可取值的范围都非常大,但是有时候我们指定在固定的几个值范围内选择一个或多个,那么就需要使用ENUM枚举类型和SET集合类型了。 - -比如性别只有“男”或“女”;上下班交通方式可以有“地铁”、“公交”、“出租车”、“自行车”、“步行”等。 - -枚举和集合类型字段声明的语法格式如下: - -- 字段名ENUM(‘值1’,‘值2’,…‘值n’) - -- 字段名 SET(‘值1’,‘值2’,…‘值n’) - -ENUM类型的字段在赋值时,只能在指定的枚举列表中取值,而且一次只能取一个。枚举列表最多可以有65535个成员。ENUM值在内部用整数表示,每个枚举值均有一个索引值, MySQL存储的就是这个索引编号。例如,定义ENUM类型的列(‘first’, ‘second’, ‘third’)。 - -SET类型的字段在赋值时,可从定义的值列表中选择1个或多个值的组合。SET列最多可以有64个成员。SET值在内部也用整数表示,分别是1,2,4,8……,都是2的n次方值,因为这些整数值对应的二进制都是只有1位是1,其余是0。 - -**5.5** **数据字段属性** - -**unsigned** - -- 无符号的 -- 声明该数据列不允许负数 - -**ZEROFILL** - -- 0填充的 - -- 不足位数的用0来填充 , 如int(3),5则为005 - - - -5.6语法 - -§ ENGINE=InnoDB DEFAULT CHARSET=utf8 - -- 查看数据库的定义 - SHOW CREATE DATABASE school; - -- 查看数据表的定义 - SHOW CREATE TABLE student; - -- 显示表结构 - DESC student; - -- 设置严格检查模式(不能容错了) - SET sql_mode='STRICT_TRANS_TABLES'; - -# 作业 - --- ## 第1题 --- --- 1、创建数据库test01_market - -```mysql -CREATE DATABASE test01_market; -USE test01_market; --- 2、创建表格customers -create table customers( -c_num int(11), -c_name varchar(50), -c_contact varchar(50), -c_city varchar(50), -c_birth date -); --- | 字段名 | 数据类型 | --- | --------- | ----------- | --- | c_num | int(11) | --- | c_name | varchar(50) | --- | c_contact | varchar(50) | --- | c_city | varchar(50) | --- | c_birth | date | -| -- **要求3:**将c_contact字段移动到c_birth字段后面 -| alter table customers modify c_contact varchar(50) after c_birth; -| -- **要求4:**将c_name字段数据类型改为 varchar(70) -| alter table customers modify c_name varchar(70); -- **要求5:**将c_contact字段改名为c_phone -| alter table customers change c_contact c_phone varchar(50); -| -- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -| alter table customers add c_gender char(1) after c_name; -| -- **要求7:**将表名改为customers_info -alter table customers rename to customers_info; -| -- **要求8:**删除字段c_city -| alter table customers_info drop c_city; - --- ## 第2题 --- - --- 1、创建数据库test02_library -create database test02_library; -use test02_library; --- 2、创建表格books -create table books( -b_id int(11), -b_name varchar(50), -authors varchar(100), -price float, -pubdate year, -note varchar(100), -num int(11) -); --- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | --- | ------- | -------- | ------------- | -------- | ---- | --- | b_id | 书编号 | int(11) | 否 | 是 | --- | b_name | 书名 | varchar(50) | 否 | 否 | --- | authors | 作者 | varchar(100) | 否 | 否 | --- | price | 价格 | float | 否 | 否 | --- | pubdate | 出版日期 | year | 否 | 否 | --- | note | 说明 | varchar(100) | 是 | 否 | --- | num | 库存 | int(11) | 否 | 否 | -| alter table books change hote note varchar(100); -| -- 3、向books表中插入记录 -| -- 1) 指定所有字段名称插入第一条记录 -| insert into books (b_id,b_name,`authors`,price,pubdate,note,num) VALUES (1,'Tal of AAA','Dickes',23,1995,'novel',11); -| -- 2)不指定字段名称插入第二记录 -| insert into books VALUES (2,'EmmaT','Jane lura',35,1993,'joke',22); -| -- 3)同时插入多条记录(剩下的所有记录) -| insert into books VALUES (3,'Story of Jane','Jane Tim',40,2001,'novel',0),(4,'Lovey Day','George Byron',20,2005,'novel',30),(5,'Old land','Honore Blade',30,2010,'law',0),(6,'The Battle','Upton Sara',30,1999,'medicine',40),(7,'Rose Hood','Richard haggard',28,2008,'cartoon',28); | -| DESC BOOKS; --- | b_id | b_name | authors | price | pubdate | note | num | --- | ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | --- | 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | --- | 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | --- | 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | --- | 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | --- | 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | --- | 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | --- | 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | -| -- 4、将小说类型(novel)的书的价格都增加5。 -| UPDATE books set price = price + 5 where note='novel'; - --- 5、将名称为EmmaT的书的价格改为40。 -update books set price = 40 where b_name = 'EmmaT'; --- 6、删除库存为0的记录 -delete from books where num=0; - --- ## 第3题 --- - --- 1、创建数据库test03_bookstore -create database test03_bookstore; -use test03_bookstore; --- 2、创建book表 -create table book( -id int(11), -title varchar(100), -author varchar(100), -price double(11,2), -sales int(11), -stock int(11), -img_path varchar(100) -); --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | sales | int(11) | NO | | NULL | | --- | stock | int(11) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ - --- ``` --- - --- 尝试添加部分模拟数据,参考示例如下: -insert into book VALUES (1,'解忧杂货店','东野圭吾',27.20,102,98,'upload/books/解忧杂货店.jpg'),(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg'); --- ```mysql --- +----+-------------+------------+-------+-------+-------+----------------------------+ --- | id | title | author | price | sales | stock | img_path | --- +----+-------------+------------+-------+-------+-------+-----------------------------+ --- | 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | --- | 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | --- +----+---------------+------------+-------+-------+-------+----------------------------+ - --- ``` --- - --- 3、创建用户表users,并插入数据 -create table users( -id int(11), -username varchar(100), -password varchar(100), -email varchar(100) -); --- - ```mysql --- -- +----------+--------------+------+-----+---------+----------------+ --- -- | Field | Type | Null | Key | Default | Extra | --- -- +----------+--------------+------+-----+---------+----------------+ --- -- | id | int(11) | NO | PRI | NULL | auto_increment | --- -- | username | varchar(100) | NO | UNI | NULL | | --- -- | password | varchar(100) | NO | | NULL | | --- -- | email | varchar(100) | YES | | NULL | | --- -- +----------+--------------+------+-----+---------+----------------+ - --- -- ``` --- - --- 尝试添加部分模拟数据,参考示例如下: -insert into users values (1,'admin',112233,'admin@mxdx.com'); --- ```mysql --- +----+----------+----------------------------------+--------------------+ --- | id | username | password | email | --- +----+----------+----------------------------------+--------------------+ --- | 1 | admin | 112233 | admin@mxdx.com | --- +----+----------+----------------------------------+--------------------+ - --- ``` --- - --- 4、创建订单表orders -create table orders( -id varchar(100), -order_time datetime, -total_count int(11), -total_amount double(11,2), -state int(11), -user_id int(11) -); --- ```mysql --- +--------------+--------------+------+-----+---------+-------+ --- | Field | Type | Null | Key | Default | Extra | --- +--------------+--------------+------+-----+---------+-------+ --- | id | varchar(100) | NO | PRI | NULL | | --- | order_time | datetime | NO | | NULL | | --- | total_count | int(11) | NO | | NULL | | --- | total_amount | double(11,2) | NO | | NULL | | --- | state | int(11) | NO | | NULL | | --- | user_id | int(11) | NO | MUL | NULL | | --- +--------------+--------------+------+-----+---------+-------+ - --- ``` --- - --- 尝试添加部分模拟数据,参考示例如下: -insert into orders values (15294258455691,'2018-06-20 00:30:45',2,50.20,0,1); --- ```mysql --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | id | order_time | total_count | total_amount | state | user_id | --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | --- +----------------+---------------------+-------------+--------------+-------+---------+ - --- ``` --- - --- 5、创建订单明细表order_items -create table order_items( -id int(11), -count int(11), -amount double(11,2), -title varchar(100), -author varchar(100), -price double(11,2), -img_path varchar(100), -order_id varchar(100) -); --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | count | int(11) | NO | | NULL | | --- | amount | double(11,2) | NO | | NULL | | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- | order_id | varchar(100) | NO | MUL | NULL | | --- +----------+--------------+------+-----+---------+----------------+ - --- ``` --- - --- 尝试添加部分模拟数据,参考示例如下: -inset into order_items values (1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg|15294258455691'),(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg|15294258455691'); --- ```mysql --- +----+-------+--------+---------+---------+-------+----------------+----------------+ --- | id |count| amount| title | author | price | img_path | order_id | --- +----+-------+--------+------------+----------+-------+----------------+----------------+ --- | 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | --- | 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | --- +----+-------+--------+------------+----------+-------+------------+----------------+ -``` - -| | | | -| ---- | ---- | ---- | -| | | | -| | | | -| | | | -| | | | -| | | | -| | | | -| | | | -| | | | -| | | | -| | | | -| | | | -| | | | -| | | | -| | | | -| | | | -| | | | -| | | | -| | | | - - - diff --git "a/29 \350\267\257\347\216\262/20230222 \347\272\246\346\235\237\347\273\203\344\271\240.md" "b/29 \350\267\257\347\216\262/20230222 \347\272\246\346\235\237\347\273\203\344\271\240.md" deleted file mode 100644 index 302ea2c3fd74f9fc25fd1562b04409f0bd8b3414..0000000000000000000000000000000000000000 --- "a/29 \350\267\257\347\216\262/20230222 \347\272\246\346\235\237\347\273\203\344\271\240.md" +++ /dev/null @@ -1,691 +0,0 @@ -# 约束 - -### 作业 - -```mysql --- ## 第1题 --- - --- 1、创建数据库test01_company -create database test01_company charset utf8; -use test01_company; --- 2、创建表格offices -create table offices( -officeCode int, -city varchar(30), -address varchar(50), -country varchar(50), -postalCode varchar(25) - ); - - -- 字段名 | 数据类型 | - -- -------- | ------------- | - -- officeCode | int | - -- city | varchar(30) | - -- address | varchar(50) | - -- country | varchar(50) | - -- postalCode | varchar(25) | - -- - -- 3、创建表格employees - create table employees( - empNum int(11), - lastName varchar(50), - firstName varchar(50), - mobile varchar(25), - code int, - jobTitle varchar(50), - birth date, - Note varchar(255), - Sex varchar(5) - ); --- | | 字段名 | 数据类型 | --- | --------- | ------------- | --- | empNum | int(11) | --- | lastName | varchar(50) | --- | firstName | varchar(50) | --- | mobile | varchar(25) | --- | code | int | --- | jobTitle | varchar(50) | --- | birth | date | --- | Note | varchar(255) | --- | Sex | varchar(5) | | | -| -- **要求4:**将表employees的mobile字段修改到code字段后面。 -| alter table employees modify mobile varchar(25) after code; -| -- **要求5:**将表employees的birth字段改名为birthday; -| alter table employees change birth birthday date; -| -- **要求6:**修改sex字段,数据类型为char(1)。 -| alter table employees modify sex char(1); -| -- **要求7:**删除字段note; -| alter table employees drop note; -| -- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); -| alter table employees add favoriate_activity varchar(100); -| -- **要求9:**将表employees的名称修改为 employees_info -| alter table employees rename to employees_info; - -## 第2题 - --- --- 1、创建数据库test02db -create database test02db charset utf8; -use test02db; --- 2、创建表格pet -create table pet( -`name` varchar(20), -`owner` varchar(20), -species varchar(20), -sex char(1), -birth year, -death year -); --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | --- - --- 3、添加记录 -insert into pet values -('Fluffy','harold','Cat','f',2003,2010), -('Claws', 'gwen','Cat','m',2004,null), -('Buffy', null,'Dog','f',2009,null), -('Fang','benny','Dog','m',2000,null), -('bowser','diane','Dog','m',2003,2009), -('Chirpy',null,'Bird','f',2008,null); - --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | -| desc pet; -| -- 4、 添加字段主人的生日owner_birth。 -| alter table pet add owner_birth date; -| -- 5、 将名称为Claws的猫的主人改为kevin -| update pet set owner='kevin' where name='Claws'and species='Cat'; -| -- 6、 将没有死的狗的主人改为duck -| update pet set owner='duck' where death is null and species ='Dog'; -| -- 7、 查询没有主人的宠物的名字; -| select `name` from pet where `owner` is null; -| -- 8、 查询已经死了的cat的姓名,主人,以及去世时间; -| select `name`,`owner`,death from pet where death is not null and species ='cat'; -| -- 9、 删除已经死亡的狗 -| delete from pet where species='Dog' and death is not null; -| -- 10、查询所有宠物信息 -| select * from pet; - - -## 第3题 - --- 1、创建数据库:test03_company -create database test03_company charset utf8; -use test03_company ; --- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 --- A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 --- create table department( --- depid int primary key auto_increment, --- depname char(10) not null unique key, --- deinfo varchar(200) --- ); -create table department( -depid int primary key auto_increment, -depname varchar(50) not null unique key, -deinfo varchar(200) not null -); -alter table department modify deinfo varchar(100); --- B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 --- - --- * 雇员编号为主键; --- * 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); - --- * 性别默认为男; --- create table employee ( --- empid int primary key auto_increment, --- name varchar(10) not null, --- sex enum('男','女') not null default '男', --- title varchar(10), --- birthday date, --- depid int foreign key references department(depid) --- ); - - create table employee( - empid int primary key auto_increment, - name varchar(50) not null, - sex enum('男','女') not null default '男', - title varchar(10), - birthday date, - depid int , - foreign key (depid) references department(depid) -); - - - - --- C. --- 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 --- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) -create table salary( -empid int primary key auto_increment, -foreign key (empid) references employee(empid), -basesalary int, -titlesalary int, -deduction int -); - --- 4、添加数据如下: --- 部门表: --- | 部门编号 | 部门名称 | 部门简介 | --- | -------- | -------- | ------------ | --- | 111 | 生产部 | Null | --- | 222 | 销售部 | Null | --- | 333 | 人事部 | 人力资源管理 | -insert into department values -(111,'生产部',Null), -(222,'销售部',Null), -(333,'人事部','人力资源管理'); --- 雇员表: --- | 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | --- | -------- | ---- | ---- | ---------- | ---------- | ------------ | --- | 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | --- | 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | --- | 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | --- | 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | -insert into employee values -(1001,'张三','男','高级工程师','1975-1-1',111), -(1002,'李四','女','助工','1985-1-1',111), -(1003,'王五','男','工程师','1978-11-11',222), -(1004,'张六','男','工程师','1999-1-1',222); --- 工资表: --- | 雇员编号 | 基本工资 | 职务工资 | 扣除 | --- | -------- | -------- | -------- | ---- | --- | 1001 | 2200 | 1100 | 200 | --- | 1002 | 1200 | 200 | NULL | --- | 1003 | 2900 | 700 | 200 | --- | 1004 | 1950 | 700 | 150 | -insert into salary values -(1001,2200,1100,200), -(1002,1200,200,null), -(1003,2900,700,200), -(1004,1950,700,150); - - --- ## 第4题 --- --- 1、创建一个数据库:test04_school -create database test04_school charset utf8; -use test04_school; --- 2、创建如下表格 --- --- 表1 Department表的定义 --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | --- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | --- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | -create table Department( -DepNo int(10) primary key auto_increment not null unique key, -DepName varchar(20) not null, -DepNote varchar(50) -); --- --- 表2 Teacher表的定义 --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | Number | 教工号 | int | 是 | 否 | 是 | 是 | --- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | --- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | --- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | --- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | --- | Salary | 工资 | float | 否 | 否 | 否 | 否 | --- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | -create table Teacher( -Number int primary key not null unique key auto_increment, -Name varchar(30) not null, -Sex varchar(4), -Birth date, -DepNo int, -foreign key (DepNo) references Department(DepNo), -Salary float, -Address varchar(100) -); - --- 3、添加记录 --- --- | **DepNo** | **DepName** | **DepNote** | --- | --------- | ----------- | ------------------ | --- | 601 | 软件技术系 | 软件技术等专业 | --- | 602 | 网络技术系 | 多媒体技术等专业 | --- | 603 | 艺术设计系 | 广告艺术设计等专业 | --- | 604 | 管理工程系 | 连锁经营管理等专业 | -insert into Department values -(601,'软件技术系','软件技术等专业'), -(602,'网络技术系','多媒体技术等专业'), -(603,'艺术设计系','广告艺术设计等专业'), -(604,'管理工程系','连锁经营管理等专业'); - --- | **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | --- | ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | --- | 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | --- | 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | --- | 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | --- | 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | --- | 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | -insert into Teacher values -(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'), -(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'), -(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'), -(2004,'James','女','1980-10-20',602,3500,'四川省成都市'), -(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); --- 4、用SELECT语句查询Teacher表的所有记录。 -select * from Teacher; -``` - -## 笔记 - -**14.1 约束的作用** - -约束是为了保证数据的完整性,数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。 - -数据的完整性要从以下四个方面考虑: - -- 实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录 -- 域完整性(Domain Integrity):例如:年龄范围0-120,性别范围“男/女” -- 引用完整性(Referential Integrity):例如:员工所在部门,在部门表中要能找到这个部门 -- 用户自定义完整性(User-defined Integrity):例如:用户名唯一、密码不能为空等,本部门经理的工资不得高于本部门职工的平均工资的5倍。 - -**14.2 约束的类型** - -**1、约束类型** - -- 键约束:主键约束、外键约束、唯一键约束 -- Not NULL约束:非空约束 -- Check约束:检查约束[8.0版本支持] -- Default约束:默认值约束 - -自增是键约束字段的一个额外的属性。 - -**2、表级约束和列级约束** - -其中键约束和检查约束是表级约束,即不仅要看约束字段当前单元格的数据,还要看其他单元格的数据。 - -非空约束和默认值约束都是列级约束,即约束字段只看当前单元格的数据即可,和其他单元格无关。 - -所有的表级约束都可以在“information_schema.table_constraints”表中查看。 - -SELECT * FROM information_schema.table_constraints WHERE table_name = '表名称'; - -**3、约束和索引** - -在MySQL中键约束会自动创建索引,提高查询效率。索引的详细讲解在高级部分。 - -MySQL高级会给大家讲解索引、存储引擎等,因为高级要给大家分析SQL性能。而基础阶段先不管效率,只要能查出来就行。 - -约束和索引不同: - -约束是一个逻辑概念,它不会单独占用物理空间, - -索引是一个物理概念,它是会占用物理空间。 - -例如:字典 - -字典里面有要求,不能有重复的字(字一样,读音也一样),这是约束。 - -字典里面有“目录”,它可以快速的查找某个字,目录需要占用单独的页。 - -**14.3 非空约束** - -**1、作用** - -限定某个字段/某列的值不允许为空 - -**2、关键字:not null** - -**3、特点** - -(1)只能某个列单独限定非空,不能组合非空 - -(2)一个表可以有很多列都分别限定了非空 - -**14.4 唯一键约束** - -**1、唯一键约束的作用** - -单列唯一:用来限制某个字段/某列的值不能重复。 - -组合唯一:用来限定几个字段的值组合不能重复。 - -**2、关键字:unique key** - -**3、特点** - -(1)一个表可以有很多个唯一键约束, - -(2)每一个唯一键约束字段都会自动创建索引。 - -(3)唯一键约束允许为空 - -(4)唯一键约束也可以是复合唯一 - -(5)删除唯一键约束的索引来删除唯一键约束 - -索引名默认是字段名,复合唯一默认是第一个字段名 - -**14.5 主键约束(重要)** - -**1、主键约束的作用** - -用来唯一的确定一条记录 - -**2、关键字:primary key** - -**3、特点** - -(1)唯一并且非空 - -(2)一个表最多只能有一个主键约束 - -(3)如果主键是由多列组成,可以使用复合主键 - -(4)主键列会自动创建索引(能够根据主键查询的,就根据主键查询,效率更高) - -主键列的唯一并且非空是约束的概念,但是mysql会给每个表的主键列创建索引,会开辟单独的物理空间来存储每一个主键的目录表(Btree结构)。这样设计的意义,可以根据主键快速查询到某一行的记录。 - -(5)如果删除主键约束了,主键约束对应的索引就自动删除了。 - -**4、唯一键约束和主键约束区别** - -(1)唯一键约束一个表可以有好几个, - -但是主键约束只有一个 - -(2)唯一键约束本身不带非空限制,如果需要非空,需要单独定义。 - -主键约束不用再定义NOT NULL,自身就带非空限制。 - -```my -create table 表名称( -字段名 数据类型 primary key, - 字段名 数据类型, - 字段名 数据类型 -); -create table 表名称( -字段名 数据类型, - 字段名 数据类型, - 字段名 数据类型, - primary key(字段名) -); -(2)建表后增加主键约束(了解) -alter table 表名称 add primary key(字段列表); #字段列表可以是一个字段,也可以是多个字段,如果是多个字段的话,是复合主键 - -``` - -```mys -1、作用: -主键约束是用来唯一的标识一行记录, -或者换句话说,表中不允许出现两条无法区分的记录。 - -问?唯一键约束不就可以实现吗? -答:唯一键约束因为没有限定非空,可能出现两个NULL。 - -学号 姓名 身份证号码(唯一键) -1 张三 524265198235684255 -2 李四 524265198235684266 -3 王五 NULL -3 王五 NULL - -2、关键字:primary key -3、特点 -(1)每一个表最多只能定义一个主键约束。 -(2)主键约束,既要求唯一又要求非空 -可以看成 主键约束 = 非空约束 + 唯一键约束 -但不完全等价。 - -4、唯一键约束和主键约束的区别 -(1)唯一键约束一个表可以有好几个, -但是主键约束只有一个 -(2)唯一键约束本身不带非空限制,如果需要非空,需要单独定义。 -主键约束不用再定义NOT NULL,自身就带非空限制。 -*/ - -#建表时,指定主键约束 -create table 表名称( - 字段名 数据类型 primary key, - 字段名 数据类型 not null, - 字段名 数据类型 not null unique key, - 字段名 数据类型 not null unique key, - 字段名 数据类型 unique key, - 字段名 数据类型 unique key - 字段名 数据类型 -); - -create table 表名称( - 字段名 数据类型 , - 字段名 数据类型 not null, - 字段名 数据类型 not null unique key, - 字段名 数据类型 not null unique key, - 字段名 数据类型 unique key, - 字段名 数据类型 unique key - 字段名 数据类型, - primary key(字段名), - unique key(字段名) -); - -mysql> drop database mxdx; -Query OK, 19 rows affected (0.17 sec) - -mysql> create database mxdx; -Query OK, 1 row affected (0.01 sec) - -mysql> use mxdx; -Database changed - -#创建员工表 -create table emp( - id int primary key, - ename varchar(20) not null, - cardid char(18) unique key not null, #非空并且唯一 - tel char(11) unique key, #只是唯一,可以为空 - address varchar(100) #既可以为null,又可以重复 -); - -#查看表结构 -desc emp; -14.6 默认值约束 -1、作用 -给某个字段/某列指定默认值,当添加时或修改时,可以使用默认值。 -2、关键字:default -3、如何给字段加默认值 -(1)建表时 -create table 表名称( - 字段名 数据类型 primary key, - 字段名 数据类型 unique key not null, - 字段名 数据类型 unique key, - 字段名 数据类型 not null default 默认值, -); -create table 表名称( - 字段名 数据类型 default 默认值 , - 字段名 数据类型 not null default 默认值, - 字段名 数据类型 not null default 默认值,, - primary key(字段名), - unique key(字段名) -); - -说明:默认值约束一般不在唯一键和主键列上加 -2)建表后(了解) -alter table 表名称 modify 字段名 数据类型 default 默认值; - -#如果这个字段原来有非空约束,你还保留非空约束,那么在加默认值约束时,还得保留非空约束,否则非空约束就被删除了 -#同理,在给某个字段加非空约束也一样,如果这个字段原来有默认值约束,你想保留,也要在modify语句中保留默认值约束,否则就删除了 -alter table 表名称 modify 字段名 数据类型 default 默认值 not null; -4、如何删除默认值约束(了解) -alter table 表名称 modify 字段名 数据类型 ;#删除默认值约束,也不保留非空约束 - -alter table 表名称 modify 字段名 数据类型 not null; #删除默认值约束,保留非空约束 -14.7 自增属性 -1、作用 -作用:给某个字段自动赋值,这个值是一直往上增加,如果没有特意干扰的,每次自增1. -2、关键字:auto_increment -3、特点和要求 -(1)一个表只能有一个自增字段,因为一个表只有一个AUTO_INCREMENT属性记录自增字段值 -(2)并且自增字段只能是key字段,即定义了主键、唯一键等键约束的字段。 -一般都是给主键和唯一键加自增。 -(3)自增字段应该是数值类型,一般都是整数类型。 -(4)AUTO_INCREMENT属性值 必须 > 当前自增字段的最大值 -(5)如果自增列指定了 0 和 null,会在当前最大值的基础上自增, -如果自增列手动指定了具体值,直接赋值为具体值。 -14.8 检查约束 -1、作用 -检查(CHECK) 约束用于限制字段中的值的范围。如果对单个字段定义 CHECK 约束,那么该字段只允许特定范围的值。如果对一个表定义 CHECK 约束,那么此约束会基于行中其他字段的值在特定的字段中对值进行限制。 -在MySQL 8.0.16版本之前, CREATE TABLE语句支持给单个字段定义CHECK约束的语法,但是不起作用。 -2、关键字:check -例如MySQL8.0之前,就算给表定义了检查约束,也不起作用。在MySQL8.0.16版本之后,CREATE TABLE语句既支持给单个字段定义列级CHECK约束的语法,还支持定义表级CHECK约束的语法。 -3、如何定义检查约束 -(1)建表时 -#在建表时,可以指定检查约束 -create table 表名称( - 字段名1 数据类型 check(条件), #在字段后面直接加检查约束 - 字段名2 数据类型, - 字段名3 数据类型, - check (条件) #可以限定两个字段之间的取值条件 -); - -#在建表时,可以指定检查约束 -create table 表名称( - 字段名1 数据类型 check(条件) enforced, #在字段后面直接加检查约束 - 字段名2 数据类型, - 字段名3 数据类型, - check (条件) enforced #可以限定两个字段之间的取值条件 -); -14.9 外键约束(了解) -外键约束会影响性能,效率,所以很多人不愿意加外键约束。 -学生问题: -(1)如果两个表之间有关系(一对一、一对多),比如:员工表和部门表(一对多),它们之间是否一定要建外键约束? -答:不是的 -(2)建和不建外键约束有什么区别? -答: -建外键约束,你的操作(创建表、删除表、添加、修改、删除)会受到限制,从语法层面受到限制。例如:在员工表中不可能添加一个员工信息,它的部门的值在部门表中找不到。 -不建外键约束,你的操作(创建表、删除表、添加、修改、删除)不受限制,要保证数据的引用完整性,只能依靠程序员的自觉,或者是在Java程序中进行限定。例如:在员工表中,可以添加一个员工的信息,它的部门指定为一个完全不存在的部门。 -(3)那么建和不建外键约束和查询有没有关系? -答:没有 -1、作用 -限定某个表的某个字段的引用完整性, -比如:员工表的员工所在部门的选择,必须在部门表能找到对应的部分。 -2、关键字:foreign key -3、主表和从表/父表和子表 -主表(父表):被引用的表,被参考的表 -从表(子表):引用别人的表,参考别人的表 -例如:员工表的员工所在部门这个字段的值要参考部门表, - 部门表是主表,员工表是从表。 -例如:学生表、课程表、选课表 - 选课表的学生和课程要分别参考学生表和课程表, - 学生表和课程表是主表,选课表是从表。 -4、特点 -(1)在“从表”中指定外键约束,并且一个表可以建立多个外键约束 -(2)创建(create)表时就指定外键约束的话,先创建主表,再创建从表 -(3)删表时,先删从表(或先删除外键约束),再删除主表 -(4)从表的外键列,必须引用/参考主表的键列(主键或唯一键) -为什么?因为被依赖/被参考的值必须是唯一的 -(5)从表的外键列的数据类型,要与主表被参考/被引用的列的数据类型一致,并且逻辑意义一致。 -例如:都是表示部门编号,都是int类型。 -(6)外键列也会自动建立索引(根据外键查询效率很高,很多) -(7)外键约束的删除,所以不会自动删除,如果要删除对应的索引,必须手动删除 -5、如何指定外键约束 -(1)建表时 -create table 主表名称( - 字段1 数据类型 primary key, - 字段2 数据类型 -); - -create table 从表名称( - 字段1 数据类型 primary key, - 字段2 数据类型, - foreign key (从表的某个字段) references 主表名(被参考字段) -); -#(从表的某个字段)的数据类型必须与主表名(被参考字段)的数据类型一致,逻辑意义也一样 -#(从表的某个字段)的字段名可以与主表名(被参考字段)的字段名一样,也可以不一样 -#演示外键约束 -/* -1、作用: -用来限定子表和父表的引用关系。 -子表的外键字段值必须在父类被引用字段值的范围内。 - -2、外键约束一定是有两个表的角色。 -其中一个作为子表(又称为从表),另一个作为父表(又称为主表)。 - -子表外键字段的值要从父表被引用字段的值中选择。 - -例如:员工表中记录员工信息,其中有一个字段是“部门编号”,表示这个员工所属的部门。 - 部门的信息是记录在部门表中, - 但是员工表的“部门编号”字段的值不能随意填写,需要参考/引用“部门表”的部门记录。 - - 员工表是子表,引用别人,受部门表的牵制/范围管辖。 - 部门表示父表,被别人引用。 - -例如:商品表、用户表、订单表、订单明细表 - 商品表里面记录了商品信息(商品名称、价格、库存量...) - 用户表里面记录了用户信息(用户名、密码、账户余额...) - 订单表里面记录了订单信息(订单编号、订单总价格、订单商品总数量、收获地址...) - 订单明细表记录了订单中每一个明细(商品编号、订单编号、价格、数量....) - - 中午下了一个订单,买了“米粉”、“袜子”、“手机贴膜”、“高压锅” - 订单编号:112122123222222 - - 商品表: - 1 “米粉” 52.5 .... - 2 “袜子” 23.0 .... - 3 “手机贴膜” 15.0 .... - 4 “高压锅” 125.0 .... - - 订单明细中: - 订单编号 商品编号 数量 价格 .... - 112122123222222 1 2(盒米粉) 52.5 - 112122123222222 2 1(打) 23.0 - 112122123222222 3 1(张) 15.0 - 112122123222222 4 1(个) 125.0 - - - 订单明细表是子表,商品表和订单表是父表。 - -3、外键约束要求 -(1)外键约束必须在子表中定义 -(2)子表中要定义外键约束的字段的数据类型和逻辑意义,必须和父表中被引用字段的数据类型、逻辑意义一样。 -例如:员工表中部门编号字段 引用 部门表中的部门编号字段 - 订单明细表中的订单编号 引用 订单表中订单编号 - 订单明细表中的商品编号 引用 商品表中商品编号 - -(3)子表中要定义外键约束的字段的名字和父表中被引用字段名称可以不同。 -(4)父表中被引用的字段必须是键约束字段,一般都是主键或唯一键约束。 -此时子表和父表的关系可以是一对一或一对多的关系。 -父表是一,子表是一或多。 - -例如:父表(部门表)一条记录,对应子表(员工表)多条记录。 - 父表(订单表)一条记录,对应子表(订单明细表)一条或多条记录。 - -(5)父表必须先存在,然后才能正确建立子表的外键约束 - - -4、关键字 foreign key 和 references - - -5、外键约束约束了什么? -(1)建表的顺序,先建父表,再建子表 -(2)删表的顺序,先删子表,再删父表, -或者先删掉外键约束,然后分别删除两个表(顺序就随意了) -(3)给子表添加数据、修改外键字段的数据,受影响,因为要从父表的被引用字段范围内选值。 -(4)删除和修改父表的被引用字段的数据,受影响,因为要考虑这个值是否被子表引用了。 -(5)是否建立外键,和查询无关。 - -比喻:孩子的消费行为要受约束,在爸爸的挣钱范围内。 - 爸爸的行为也要受约束,被依赖,不是那么自由。 - 双方都会受影响。 - -``` - diff --git "a/29 \350\267\257\347\216\262/20230223 \346\237\245\350\257\242\345\222\214\344\272\221\351\227\252\344\273\230.md" "b/29 \350\267\257\347\216\262/20230223 \346\237\245\350\257\242\345\222\214\344\272\221\351\227\252\344\273\230.md" deleted file mode 100644 index 702627a89a5f277329f91041ad61d8470963ba5a..0000000000000000000000000000000000000000 --- "a/29 \350\267\257\347\216\262/20230223 \346\237\245\350\257\242\345\222\214\344\272\221\351\227\252\344\273\230.md" +++ /dev/null @@ -1,453 +0,0 @@ -# MySQL - -## 作业 - - - -```mysql -create database three charset utf8; -use three; -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); --- **要求1:**查询出薪资在12000~13000之间的员工信息。 -select * from employee where salary between 12000 and 13000; --- **要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 -select id,name,addr from employee where name like '刘%'; --- **要求3:**将“李四”的家庭住址改为“广东韶关” -update employee set addr ='广东韶关' where name = '李四'; --- **要求4:**查询出名字中带“小”的员工 -select * from employee where name like '%小%'; --- **要求5:**查询出薪资高于11000的男员工信息 -select * from employee where salary >11000 and sex ='男'; --- **要求6:**查询没有登记电话号码的员工 -select * from employee where tel is null; --- **要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 -select * from employee where salary > 12000 or (addr = '广东深圳' and sex ='男' ) or (addr = '广东广州' and sex = '男'); --- **要求8:**查询每个员工的年薪,显示“姓名、年薪” -select name as '姓名',salary as '年薪' from employee ; - -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); - --- **要求1:** 查询大国 的国家名称、人口和面积。 --- - --- 如果一个国家满足下述两个条件之一,则认为该国是 大国 : --- - --- - 面积至少为 300万平方公里(即,3000000 km2) --- - --- - 人口至少为 2500 万(即 25000000) -select name,population,area from countries_info where area >=3000000 and population>=25000000; --- **要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 -select name ,`continent`,`area`,population,gdp from countries_info where continent ='Asia'; --- **要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 -select * from countries_info where area <10000 and population < 100000; --- **要求4:**查询国家名字中包含“o“字母的国家信息 -select * from countries_info where name like '%o%'; --- **要求5:**查询GDP值超过10000000000的国家信息 -select * from countries_info where gdp >10000000000; --- **要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” -select continent as 国家名,population as 人口,gdp as GDP值, gdp/population as '人均贡献GDP值' from countries_info; --- **要求7:**查询人均贡献GDP值低于1000的国家信息。 -select * from countries_info where (gdp / population)<1000; --- **要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” -select name as 国家名,population as 人口,gdp as GDP值,area/population as 人均国土面积值 from countries_info; -``` - -## 笔记 - -# 第8章 DQL - -因为查询语句使用的非常的频繁,所以很多人把查询语句单拎出来一类,DQL(数据查询语言),DR(获取)L。 - -## 8.1 SELECT语句 - -SELECT语句是用于查看计算结果、或者查看从数据表中筛选出的数据的。 - -SELECT语句的基本语法: - -```java -SELECT 常量; -SELECT 表达式; -SELECT 函数; -``` - -例如: - -```java -SELECT 1; -SELECT 9/2; -SELECT NOW(); -``` - -如果要从数据表中筛选数据,需要加FROM子句。FROM指定数据来源。字段列表筛选列。 - -```java -SELECT 字段列表 FROM 表名称; -``` - -如果要从数据表中根据条件筛选数据,需要加FROM和WHERE子句。WHERE筛选行。 - -```java -SELECT 字段列表 FROM 表名称 WHERE 条件; -``` - -完整的SELECT语句后面可以跟7个子句,后面会逐一讲解。 - -## 8.2 使用别名 - -在当前select语句中给某个字段或表达式计算结果,或表等取个临时名称,便于当前select语句的编写和理解。这个临时名称称为别名。 - -```mysql -select 字段名1 as "别名1", 字段名2 as "别名2" from 表名称 as 别名; -``` - -- 列的别名有空格时,请加双引号。**==列的别名==中没有空格时,双引号可以加也可以不加**。 -- ==**表的别名不能加双引号**==,表的别名中间不能包含空格。 -- as大小写都可以,as也完全可以省略。 - -```java -mysql> select * from student; -+------+------+ -| id | name | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) - -mysql> select id "学号",name "姓名" from student; -+------+------+ -| 学号 | 姓名 | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) - -mysql> select id 学号,name 姓名 from student; -+------+------+ -| 学号 | 姓名 | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) - -mysql> select id 学 号,name 姓 名 from student; -ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use n -ear '号,name 姓 名 from student' at line 1 -``` - -## 8.3 结果去重 - -mysql可以在查询结果中使用distinct关键字去重。 - -```mysql -select distinct 字段列表 from 表名称 【where 条件】; -``` - -```mysql -select distinct did from t_employee; -``` - - - -# 第9章 运算符 - -## 9.1 算术运算符(掌握) - -```mysql -加:+ - 在MySQL +就是求和,没有字符串拼接 -减:- -乘:* -除:/ div(只保留整数部分) - div:两个数相除只保留整数部分 - /:数学中的除 -模:% mod - -mysql中没有 +=等运算符 -``` - -```mysql -#select 表达式 -select 1+1; -update t_employee set salary = salary+100 where eid=27; - -select 9/2, 9 div 2; - -mysql> select 9/2, 9 div 2; -+--------+---------+ -| 9/2 | 9 div 2 | -+--------+---------+ -| 4.5000 | 4 | -+--------+---------+ -1 row in set (0.00 sec) - -select 9.5 / 1.5 , 9.5 div 1.5; - -mysql> select 9.5 / 1.5 , 9.5 div 1.5; -+-----------+-------------+ -| 9.5 / 1.5 | 9.5 div 1.5 | -+-----------+-------------+ -| 6.33333 | 6 | -+-----------+-------------+ -1 row in set (0.00 sec) - -select 9 % 2, 9 mod 2; -select 9.5 % 1.5 , 9.5 mod 1.5; - -select 'hello' + 'world'; -mysql> select 'hello' + 'world'; -+-------------------+ -| 'hello' + 'world' | -+-------------------+ -| 0 | -+-------------------+ -1 row in set, 2 warnings (0.00 sec) -``` - -## 9.2 比较运算符(掌握) - -```mysql -大于:> -小于:< -大于等于:>= -小于等于:>= -等于:= 不能用于null判断 -不等于:!= 或 <> 不能用于null判断 -判断是null 用 is null 或 用 <=> null -判断不是null is not null - -``` - -```mysql -#查询薪资高于15000的员工姓名和薪资 -select ename,salary from t_employee where salary>15000; - -mysql> select ename,salary from t_employee where salary>15000; -+--------+--------+ -| ename | salary | -+--------+--------+ -| 孙洪亮 | 28000 | -| 贾宝玉 | 15700 | -| 黄冰茹 | 15678 | -| 李冰冰 | 18760 | -| 谢吉娜 | 18978 | -| 舒淇格 | 16788 | -| 章嘉怡 | 15099 | -+--------+--------+ -7 rows in set (0.00 sec) - -#查询薪资正好是9000的员工姓名和薪资 -select ename,salary from t_employee where salary = 9000; -select ename,salary from t_employee where salary == 9000;#错误,不支持== #注意Java中判断用==,mysql判断用= - -mysql> select ename,salary from t_employee where salary == 9000; -ERROR 1064 (42000): You have an error in your SQL syntax; - check the manual that corresponds to your MySQL server version for the right syntax to use near '== 9000' at line 1 - -#查询工作地址 work_place不是北京的 -select * from t_employee where work_place != '北京'; -select * from t_employee where work_place <> '北京'; - -#查询员工表中部门编号不是1 -select * from t_employee where did != 1; -select * from t_employee where did <> 1; - -#查询奖金比例是NULL -select * from t_employee where commission_pct = null; - -mysql> select * from t_employee where commission_pct = null; #无法用=null判断 -Empty set (0.00 sec) -#mysql中只要有null值参与运算和比较,结果就是null,底层就是0,表示条件不成立。 - -#查询奖金比例是NULL -select * from t_employee where commission_pct <=> null; -select * from t_employee where commission_pct is null; - -#查询“李冰冰”、“周旭飞”、“李易峰”这几个员工的信息 -select * from t_employee where ename in ('李冰冰','周旭飞','李易峰'); - -#查询部门编号为2、3的员工信息 -select * from t_employee where did in(2,3); - -#查询部门编号不是2、3的员工信息 -select * from t_employee where did not in(2,3); - -#查询薪资在[10000,15000]之间 -select * from t_employee where salary between 10000 and 15000; - -#查询姓名中第二个字是'冰'的员工 -select * from t_employee where ename like '冰'; #这么写等价于 ename='冰' -select * from t_employee where ename like '_冰%'; -#这么写匹配的是第二个字是冰,后面可能没有第三个字,或者有好几个字 - -update t_employee set ename = '王冰' where ename = '李冰冰'; - -select * from t_employee where ename like '_冰_'; -#这么写匹配的是第二个字是冰,后面有第三个字,且只有三个字 - -#查询员工的姓名、薪资、奖金比例、实发工资 -#实发工资 = 薪资 + 薪资 * 奖金比例 -select ename as 姓名, -salary as 薪资, -commission_pct as 奖金比例, -salary + salary * commission_pct as 实发工资 -from t_employee; - -#NULL在mysql中比较和计算都有特殊性,所有的计算遇到的null都是null。 -#实发工资 = 薪资 + 薪资 * 奖金比例 -select ename as 姓名, -salary as 薪资, -commission_pct as 奖金比例, -salary + salary * ifnull(commission_pct,0) as 实发工资 -from t_employee; -``` - -## 9.3 区间或集合范围比较运算符(掌握) - -```mysql -区间范围:between x and y - not between x and y -集合范围:in (x,x,x) - not in(x,x,x) - between ... and ... 结果包含两端的边界 -``` - -```mysql -#查询薪资在[10000,15000] -select * from t_employee where salary>=10000 && salary<=15000; -select * from t_employee where salary between 10000 and 15000; - -#查询籍贯在这几个地方的 -select * from t_employee where work_place in ('北京', '浙江', '江西'); - -#查询薪资不在[10000,15000] -select * from t_employee where salary not between 10000 and 15000; - -#查询籍贯不在这几个地方的 -select * from t_employee where work_place not in ('北京', '浙江', '江西'); -``` - -## 9.4 模糊匹配比较运算符(掌握) - -%:代表任意个字符 - -_:代表一个字符,如果两个下划线代表两个字符 - -```mysql -#查询名字中包含'冰'字 -select * from t_employee where ename like '%冰%'; - -#查询名字以‘雷'结尾的 -select * from t_employee where ename like '%远'; - -#查询名字以’李'开头 -select * from t_employee where ename like '李%'; - -#查询名字有冰这个字,但是冰的前面只能有1个字 -select * from t_employee where ename like '_冰%'; -``` - -```mysql -#查询当前mysql数据库的字符集情况 -show variables like '%character%'; -``` - -## 9.5 逻辑运算符(掌握) - -```mysql -逻辑与:&& 或 and -逻辑或:|| 或 or -逻辑非:! 或 not -逻辑异或: xor -``` - -```mysql -#查询薪资高于15000,并且性别是男的员工 -select * from t_employee where salary>15000 and gender='男'; -select * from t_employee where salary>15000 && gender='男'; - -select * from t_employee where salary>15000 & gender='男';#错误得不到值 &按位与 -select * from t_employee where (salary>15000) & (gender='男'); - -#查询薪资高于15000,或者did为1的员工 -select * from t_employee where salary>15000 or did = 1; -select * from t_employee where salary>15000 || did = 1; - -#查询薪资不在[15000,20000]范围的 -select * from t_employee where salary not between 15000 and 20000; -select * from t_employee where !(salary between 15000 and 20000); - -#查询薪资高于15000,或者did为1的员工,两者只能满足其一 -select * from t_employee where salary>15000 xor did = 1; -select * from t_employee where (salary>15000) ^ (did = 1); -``` - - - -## 9.6 关于null值的问题(掌握) - -```mysql -#(1)判断时 -xx is null -xx is not null -xx <=> null - -#(2)计算时 -ifnull(xx,代替值) 当xx是null时,用代替值计算 -``` - -**所有的计算遇到的null都是null** - -```mysql -#查询奖金比例为null的员工 -select * from t_employee where commission_pct = null; #失败 -select * from t_employee where commission_pct = NULL; #失败 -select * from t_employee where commission_pct = 'NULL'; #失败 - -select * from t_employee where commission_pct is null; #成功 -select * from t_employee where commission_pct <=> null; #成功 <=>安全等于 -``` - -```mysql -#查询员工的实发工资,实发工资 = 薪资 + 薪资 * 奖金比例 -select ename , salary + salary * commission_pct "实发工资" from t_employee; #失败,当commission_pct为null,结果都为null - -select ename ,salary , commission_pct, salary + salary * ifnull(commission_pct,0) "实发工资" from t_employee; -``` - -## diff --git "a/29 \350\267\257\347\216\262/20230302\345\210\206\347\273\204\345\207\275\346\225\260\345\222\214\345\205\263\350\201\224\346\237\245\350\257\242.md" "b/29 \350\267\257\347\216\262/20230302\345\210\206\347\273\204\345\207\275\346\225\260\345\222\214\345\205\263\350\201\224\346\237\245\350\257\242.md" deleted file mode 100644 index 9b67e6f35a207e8ee16e25921bfd4b79f1e9b7b5..0000000000000000000000000000000000000000 --- "a/29 \350\267\257\347\216\262/20230302\345\210\206\347\273\204\345\207\275\346\225\260\345\222\214\345\205\263\350\201\224\346\237\245\350\257\242.md" +++ /dev/null @@ -1,139 +0,0 @@ -# mysql - -## 笔记 - -### 分组函数 - -```mysql -AUG(X):求平均值 -SUM(X):求总和 -MAN(X);求最小值 -MAX(X);求最大值 -COUNT(X);统计数字 -``` - -### 关联查询 - -```my -内连接;inner join ... on -左连接:a left join b on -右连接:a right join b on -全外连接:full outer join ... on -``` - -## 作业 - -```mysql -create database work_four; -use work_four; -create table Student( - Sno varchar(20) primary key, - Sname varchar(20) not null, - Ssex varchar (20) not null, - Sbirthday datetime, - Class varchar(20) - ); -insert into Student values - ('108','曾华','男','1977-9-1','95033'), - ('105','匡明','男','1975-10-2','95031'), - ('107','王丽','女','1976-1-23','95033'), - ('101','李军','男','1976-2-20','95033'), - ('109','王芳','女','1975-2-10','95031'), - ('103','陆君','男','1974-6-3','950031'); -create table Course( - Cno varchar(20) primary key, - Cname varchar(20)not null, - Tno varchar(20) not null - ); -alter table Course add constraint teacher_tno foreign key(Tno) references Teacher(Tno) on update cascade on delete cascade; -insert into Course values - ('3-105','计算机导论','825'), - ('3-245','操作系统','804'), - ('6-166','数字电路','856'), - ('9-888','高等数学','831'); - create table Score( - Sno varchar(20), - Cno varchar(20), - Degree decimal(4,1), - primary key (Sno,Cno) -); -alter table Student add constraint student_sno foreign key(Sno) references Score(Sno) on update cascade on delete cascade; -alter table Course add constraint teacher_tno foreign key(Tno) references Teacher(Tno) on update cascade on delete cascade; -insert into Score values - ('103','3-245',86), - ('105','3-245',75), - ('109','3-245',68), - ('103','3-105',92), - ('105','3-105',88), - ('109','3-105',76), - ('101','3-105',64), - ('107','3-105',91), - ('108','3-105',78), - ('101','6-166',85), - ('107','6-166',79), - ('108','6-166',81); -create table Teacher( - Tno varchar(20) primary key, - Tname varchar(20) not null, - Tsex varchar(20) not null, - Tbirthday varchar(20) not null, - Prof varchar(20) not null, - Depart varchar(20) - ); -insert into Teacher values - ('804','李诚','男','1958-12-2','副教授','计算机系'), - ('856','张旭','男','1969-3-12','讲师','电子工程系'), - ('825','王萍','女','1972-5-5','助教','计算机系'), - ('831','刘冰','女','1977-8-14','助教','电子工程系'); -#查询所有学生,都学了哪些课程,要显示学生信息和课程信息 -select *from Student inner join student on student.sno=score.Sno inner join course on course.cno=score.cno; -#查询没有学生的教师的所有信息 -select Teacher.Tno,Tname,Tsex,Tbirthday,Prof,Depart from Course inner join Score on Course.Cno=Score.Cno right join Teacher on Teacher.Tno=Course.Tno where Degree is null; -#查询Score表中的最高分的学生学号和课程号。 -select sno,cno from Score where sno=max(degree-9); -#查询所有学生的Sname、Cno和Degree列。 -select Sname,Cno,Degree from student inner join score on score.Sno=student.Sno; -#查询所有学生的Sno、Cname和Degree列。 -select Sno,Cname,Degree from Score inner join Course on Course.Cno=Score.Cno; -#查询所有学生的Sname、Cname和Degree列。 -select Sname,Cname,Degree from Score right join Course on Score.Cno=Course.Cno right join Student on Score.Sno=Student.Sno; -#查询“95033”班学生的平均分。 -select avg(Degree) from Student inner join Score on Score.Sno=Student.Sno where Class='95033'; -#查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 -select Sname,Degree from Student inner join Score on Score.Sno=Student.Sno where Degree>76 ; -#查询score中选学多门课程的同学中分数为非最高分成绩的记录。 -select Cname,Degree from Course left join Score on Score.Cno=Course.Cno where Degree<(select max(Degree) from Score); -#查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 -select Sno,Degree from Score where Degree>76; -#查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 -select Sno,Sname,Sbirthday from Student where Sno='108'; -#查询“张旭“教师任课的学生成绩。 -select Tname,Degree,Cname from Course inner join Score on Course.Cno=Score.Cno right join Teacher on Teacher.Tno=Course.Tno where Tname='张旭'; -#查询选修某课程的同学人数多于5人的教师姓名。 -#查询出“计算机系“教师所教课程的成绩表。 -#查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 -select Tname,Prof from Teacher ; -#查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 -select Degree,Cno,Student.Sno from Student inner join Score on Score.Sno=Student.Sno where Cno='3-105' and Degree>72 order by Degree desc; -#查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. -select Degree,Cno,Student.Sno from Student inner join Score on Score.Sno=Student.Sno where Cno='3-105' and Degree>72; -#查询成绩比该课程平均成绩低的同学的成绩表。 -select Sname,Degree from Student right join Score on Student.Sno=Score.Sno where Degree<(select avg(Degree) from Score); -#查询所有任课教师的Tname和Depart. -select Tname,Depart from Course inner join Score on Course.Cno=Score.Cno right join Teacher on Teacher.Tno=Course.Tno where Degree is not null; -#查询所有未讲课的教师的Tname和Depart. -select Tname,Depart from Course inner join Score on Course.Cno=Score.Cno right join Teacher on Teacher.Tno=Course.Tno where Degree is null; -#查询“男”教师及其所上的课程。 -select Tname,Tsex,Cname from Teacher inner join Course on Course.Tno=Course.Tno where Tsex='男'; -#查询最高分同学的Sno、Cno和Degree列。 -select Sname,Degree,Cno,Student.Sno from Student inner join Score on Student.Sno=Score.Sno where Degree=(select max(Degree) from Score); -#查询和“李军”同性别的所有同学的Sname. -select Sname,Ssex from Student where Ssex='男'; -#查询和“李军”同性别并同班的同学Sname. -select Sname,Class from Student where Ssex='男' and class='95033'; -#查询所有选修“计算机导论”课程的“男”同学的成绩表。 -select Cname,Ssex from Course inner join Score on Course.Cno=Score.Cno inner join Student on Student.Sno=Score.Sno where Cname='计算机导论' and Ssex='男'; -``` - - - diff --git "a/29 \350\267\257\347\216\262/20230308 \345\255\220\346\237\245\350\257\242.md" "b/29 \350\267\257\347\216\262/20230308 \345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index 41f3f8be3f96f653ba3d4ce78340e7921c85d178..0000000000000000000000000000000000000000 --- "a/29 \350\267\257\347\216\262/20230308 \345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,118 +0,0 @@ -# mysql - -## 笔记 - -```mysql --- 什么是子查询 --- 嵌套在其它SQL语句中的查询语句, --- 子查询通常先运行,所以要用()包括起来 --- 子查询的运行结果,可以做为其它语句的条件、数据源等 - -select ① from ③ where ②; - -# 形式一,放在select 后面 -#(1)在“t_employee”表中查询每个人薪资和公司平均薪资的差值, -#并显示员工薪资和公司平均薪资相差5000元以上的记录。 - -# 形式二,放在where / having 后面 - 总结: - where或having后的子查询,其子查询的结果有三种形式 - 1,单列单个值 ,可直接使用用=,>,<,>=,<=,!=这些比较运算符 - 2,单列多个值,可使用in,not in进行比较 - 3,单列多个值,可以用=,>,<,>=,<=,!=,搭配any,all,等关键字与查询结果进行比较 - - 聚合函数是对多行数据的运算, -group by 一般要结合聚合函数使用。 -形式三,放在from后面,子查询当作一个临时表使用,必须要给别名 - group by 一般要结合聚合函数使用。 -子查询的结果是单列:可以放在select 参与运算,或是作为字段,也可以放where/having后当条件 -如果是多列,多个值,只能放在from 后面当一个临时表使用,并且必须要给这个表取别名 - - -``` - -## 作业 - -```mysql -create database work5 charset utf8; -use work5; -CREATE TABLE stuinfo( -stuno varchar(11) , -stuname varchar(11), -stusex enum('男','女'), -stuage char(2), -stusddress varchar(11), -stuseat char -); -create table stuexam( -examno char, -stuno varchar(11), -writtenexam char(2), -labexam char(2) -); -create table stumarks( -examno char PRIMARY key, -stuid varchar(11), -score char(2) -); -alter table Stuinfo add constraint stuinfo_stuno foreign key(stuno) references stuexam(stuno) on update cascade on delete cascade; -alter table Stuexam add constraint stuexam_examno foreign key(examno) references stumarks(examno) on update cascade on delete cascade; -INSERT INTO `stuinfo` VALUES ('s2501', '张秋利', '男', '20', '美国硅谷', '1'); -INSERT INTO `stuinfo` VALUES ('s2502', '李斯文', '女', '18', '湖北武汉', '2'); -INSERT INTO `stuinfo` VALUES ('s2503 ', '马文才', '男', '18', '湖南长沙', '3'); -INSERT INTO `stuinfo` VALUES ('s2504', '欧阳俊雄', '女', '21', '湖北武汉', '4'); -INSERT INTO `stuinfo` VALUES ('s2505', '梅超风', '男', '16', '湖北武汉', '5'); -INSERT INTO `stuinfo` VALUES ('s2506', '陈旋风', '男', '19', '美国硅谷', '6'); - -INSERT INTO `stuexam` VALUES ('1', 's2501', '50', '70'); -INSERT INTO `stuexam` VALUES ('2', 's2502', '60', '65'); -INSERT INTO `stuexam` VALUES ('3', 's2503', '86', '70'); -INSERT INTO `stuexam` VALUES ('4', 's2504', '40', '80'); -INSERT INTO `stuexam` VALUES ('5', 's2505', '70', '85'); -INSERT INTO `stuexam` VALUES ('6', 's2506', '85', '90'); - -INSERT INTO `stumarks` VALUES ('1', 's2501', '88'); -INSERT INTO `stumarks` VALUES ('2', 's2501', '92'); -INSERT INTO `stumarks` VALUES ('3', 's2501', '53'); -INSERT INTO `stumarks` VALUES ('4', 's2502', '60'); -INSERT INTO `stumarks` VALUES ('5', 's2502', '99'); -INSERT INTO `stumarks` VALUES ('6', 's2503', '82'); - --- 在如图的数据表上完成以下题目 --- 1.查询出年龄比班上平均年龄大的学生的信息 -select * from stuinfo where stuage > (select AVG(stuage) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -select stuno,stuname,stusex,max(score) from stuinfo f left join stuMarks m on f.stuno = m.stuid group by f.stuno; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -select f.stuno,stuname,stusex,(writtenexam+labexam)/2 from stuinfo f left join stuexam x on f. stuseat= x.examno; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -select * from stuinfo where stusex ='男' and stuage >=20; -select * from stuinfo where stuage>=20; -select * from (select * from stuinfo where stuage>=20) age where stusex ='男'; --- 5.查询出年龄比所有男生年龄都大的女生的信息 -select * from (select * from stuinfo where stusex ='女') nv where stuage > all (select stuage from stuinfo where stusex ='男'); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -select * from (select * from stumarks where score>=60) m inner join stuinfo f on m.stuid=f.stuno; --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select * from stuinfo m right join stumarks k on m.stuno=k.stuid group by stuid; - -select * from stuinfo where stuno in(select stuid from stumarks group by stuid); --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select * from stuinfo m left join stumarks k on m.stuno=k.stuid where k.stuid is null; - -select * from stuinfo where stuno not in(select stuid from stumarks group by stuid); --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -select * from (select * from stumarks where score>90) m left join stuinfo f on m.stuid = f.stuno; --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -select * from stuinfo where stuno = (select stuno from stuexam where ((writtenExam+labExam)/2)>80); --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuExam) -select * from stuinfo f left join stuexam k on k.stuno=f.stuno where writtenExam > (select writtenExam from stuexam where stuno = (select stuno from stuinfo where stuname ='张秋利')) and labExam > (select labExam from stuexam where stuno = (select stuno from stuinfo where stuname ='张秋利')); --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuExam) -select * from stuinfo f left join stuexam x on f.stuno=x.stuno where -writtenExam > (select writtenExam from stuexam where stuno = (select stuno from stuinfo where stuname ='张秋利')) or labExam > (select labExam from stuexam where stuno = (select stuno from stuinfo where stuname ='张秋利')); --- 13.查询班上比所有男生年龄都要大的女生的信息 -select * from stuinfo where stuage> all (select stuage from stuinfo where stusex='男') and stusex = '女'; --- 14.查询出只是比某个男生年龄大的女生的信息 -select * from stuinfo where stuage > any (select stuage from stuinfo where stusex = '男') and stusex ='女'; -``` - diff --git "a/33\351\227\253\347\273\247\345\221\250/20230220\345\210\233\345\273\272\346\225\260\346\215\256\345\272\223\350\241\250\346\240\274.md" "b/33\351\227\253\347\273\247\345\221\250/20230220\345\210\233\345\273\272\346\225\260\346\215\256\345\272\223\350\241\250\346\240\274.md" deleted file mode 100644 index 39605329016a9b996a75bcdf57a844a890952412..0000000000000000000000000000000000000000 --- "a/33\351\227\253\347\273\247\345\221\250/20230220\345\210\233\345\273\272\346\225\260\346\215\256\345\272\223\350\241\250\346\240\274.md" +++ /dev/null @@ -1,34 +0,0 @@ -```mysql --- 1、创建数据库test01_market -CREATE DATABASE test01_market; --- 2、创建表格customers -CREATE TABLE customers( -c_num INT(11), -c_name VARCHAR(50) -c_contact VARCHAR(50), -c_city VARCHAR(50), -c_birth date -); --- | 字段名 | 数据类型 | --- | --------- | ----------- | --- | c_num | int(11) | --- | c_name | varchar(50) | --- | c_contact | varchar(50) | --- | c_city | varchar(50) | --- | c_birth | date | --- --- **要求3:**将c_contact字段移动到c_birth字段后面 -ALTER TABLE customers MODIFY c_contact VARCHAR(50) after c_birth; --- **要求4:**将c_name字段数据类型改为 varchar(70) -ALTER TABLE customers MODIFY c_name VARCHAR(70); -DESC customers; --- **要求5:**将c_contact字段改名为c_phone -ALTER TABLE customer CHANGE c_contact c_phone VARCHAR(50); --- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -ALTER TABLE customers ADD c_gender CHAR(1)AFTER c_name; --- **要求7:**将表名改为customers_info -ALTER TABLE customers RENAME TO customers_info; --- **要求8:**删除字段c_city -ALTER TABLE customers_info DROP c_city; -``` - diff --git "a/33\351\227\253\347\273\247\345\221\250/20230223\347\272\246\346\235\237.md" "b/33\351\227\253\347\273\247\345\221\250/20230223\347\272\246\346\235\237.md" deleted file mode 100644 index 133e06ce0d276385ec0fa39758d877ffce6389a1..0000000000000000000000000000000000000000 --- "a/33\351\227\253\347\273\247\345\221\250/20230223\347\272\246\346\235\237.md" +++ /dev/null @@ -1,192 +0,0 @@ -### 约束笔记 - -```mysql -约束,(数据类型就是一种对数据的约束) -1.非空约束 not null 表示这个字段必填 -2.默认约束 default 当你不给值时,系统自动以默认值填充 -3.主键约束 primary key 非空 (值)唯一 同一个表中,只能有一个主键 -4.唯一约束 unique key 值不能重复、可以为空,一个表中可以有多个字段设为唯一 -5.自增约束 (前提是主键) 不给值,给0 或给 null 值,会自动在原来最大的基础上+1,如果给值,就以给的值为准 -6.外键约束 -``` - - - - - - - -```mysql -1、创建数据库test01_market -CREATE DATABASE test01_market; -use test01_market; --- 2、创建表格customers -CREATE TABLE customers( -c_num INT(11), -c_name VARCHAR(50), -c_contact VARCHAR(50), -c_city VARCHAR(50), -c_birth date -); - -| -- | 字段名 | 数据类型 | -| ------------------------------------------------------------ | --------- | ----------- | -| -- | c_num | int(11) | -| -- | c_name | varchar(50) | -| -- | c_contact | varchar(50) | -| -- | c_city | varchar(50) | -| -- | c_birth | date | -| -- | | | -| -- **要求3:**将c_contact字段移动到c_birth字段后面 | | | -| ALTER TABLE customers MODIFY c_contact VARCHAR(50) after c_birth; | | | -| -- **要求4:**将c_name字段数据类型改为 varchar(70) | | | -| ALTER TABLE customers MODIFY c_name VARCHAR(70); | | | -| DESC customers; | | | -| -- **要求5:**将c_contact字段改名为c_phone | | | -| ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); | | | -| -- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) | | | -| ALTER TABLE customers ADD c_gender CHAR(1)AFTER c_name; | | | -| -- **要求7:**将表名改为customers_info | | | -| ALTER TABLE customers RENAME TO customers_info; | | | -| -- **要求8:**删除字段c_city | | | -| ALTER TABLE customers_info DROP c_city; | | | - --- 1、创建数据库test02db -create database test02db; -use test02db; --- 2、创建表格pet -create table pet( -`name` varchar(20), -`owner` varchar(20), -species varchar(20), -sex char(1), -birth year, -death year -); - -| -- | 字段名 | 字段说明 | 数据类型 | -| ------------------------------------------------------------ | ------- | -------- | ----------- | -| -- | name | 宠物名称 | varchar(20) | -| -- | owner | 宠物主人 | varchar(20) | -| -- | species | 种类 | varchar(20) | -| -- | sex | 性别 | char(1) | -| -- | birth | 出生日期 | year | -| -- | death | 死亡日期 | year | -| desc pet; | | | | -| -- 3、添加记录 | | | | -| insert into pet values | | | | -| ('Fluffy','harold','Cat','f',2003,2010), | | | | -| ('Claws','gwen','Cat','m',2004,null), | | | | -| ('Buffy',null,'Dog','f',2009,null), | | | | -| ('Fang','benny','Dog','m',2000,null), | | | | -| ('bowser','diane','Dog','m',2003,2009), | | | | -| ('Chirpy',null,'Bird','f',2008,null); | | | | -| -- | name | owner | species | -| -- | ------ | ------ | ------- | -| -- | Fluffy | harold | Cat | -| -- | Claws | gwen | Cat | -| -- | Buffy | | Dog | -| -- | Fang | benny | Dog | -| -- | bowser | diane | Dog | -| -- | Chirpy | | Bird | -| -- 4、 添加字段主人的生日owner_birth。 | | | | -| alter table pet add owner_birth year after `owner`; | | | | -| -- 5、 将名称为Claws的猫的主人改为kevin | | | | -| update pet set `owner`='kevin' where `name`='claws'; | | | | -| -- 6、 将没有死的狗的主人改为duck | | | | -| update pet set `owner`='duck' where death is null and species='dog'; | | | | -| -- 7、 查询没有主人的宠物的名字; | | | | -| select `name` from pet where owner is null; | | | | -| -- 8、 查询已经死了的cat的姓名,主人,以及去世时间; | | | | -| select `name`,`owner`,death from pet where species='cat' and death is not null; | | | | -| -- 9、 删除已经死亡的狗 | | | | -| delete from pet where species='dog' and death is not null; | | | | -| -- 10、查询所有宠物信息 | | | | -| select * from pet; | | | | -``` - -1、创建数据库test01_market -CREATE DATABASE test01_market; -use test01_market; --- 2、创建表格customers -CREATE TABLE customers( -c_num INT(11), -c_name VARCHAR(50), -c_contact VARCHAR(50), -c_city VARCHAR(50), -c_birth date -); - --- | 字段名 | 数据类型 | --- | --------- | ----------- | --- | c_num | int(11) | --- | c_name | varchar(50) | --- | c_contact | varchar(50) | --- | c_city | varchar(50) | --- | c_birth | date | --- --- **要求3:**将c_contact字段移动到c_birth字段后面 -ALTER TABLE customers MODIFY c_contact VARCHAR(50) after c_birth; --- **要求4:**将c_name字段数据类型改为 varchar(70) -ALTER TABLE customers MODIFY c_name VARCHAR(70); -DESC customers; --- **要求5:**将c_contact字段改名为c_phone -ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); --- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -ALTER TABLE customers ADD c_gender CHAR(1)AFTER c_name; --- **要求7:**将表名改为customers_info -ALTER TABLE customers RENAME TO customers_info; --- **要求8:**删除字段c_city -ALTER TABLE customers_info DROP c_city; - --- 1、创建数据库test02db -create database test02db; -use test02db; --- 2、创建表格pet -create table pet( -`name` varchar(20), -`owner` varchar(20), -species varchar(20), -sex char(1), -birth year, -death year -); --- | 字段名 | 字段说明 | 数据类型 | --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | -desc pet; --- 3、添加记录 -insert into pet values -('Fluffy','harold','Cat','f',2003,2010), -('Claws','gwen','Cat','m',2004,null), -('Buffy',null,'Dog','f',2009,null), -('Fang','benny','Dog','m',2000,null), -('bowser','diane','Dog','m',2003,2009), -('Chirpy',null,'Bird','f',2008,null); --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | --- 4、 添加字段主人的生日owner_birth。 -alter table pet add owner_birth year after `owner`; --- 5、 将名称为Claws的猫的主人改为kevin -update pet set `owner`='kevin' where `name`='claws'; --- 6、 将没有死的狗的主人改为duck -update pet set `owner`='duck' where death is null and species='dog'; --- 7、 查询没有主人的宠物的名字; -select `name` from pet where owner is null; --- 8、 查询已经死了的cat的姓名,主人,以及去世时间; -select `name`,`owner`,death from pet where species='cat' and death is not null; --- 9、 删除已经死亡的狗 -delete from pet where species='dog' and death is not null; --- 10、查询所有宠物信息 -select * from pet; \ No newline at end of file diff --git "a/33\351\227\253\347\273\247\345\221\250/\346\237\245\350\257\242\344\275\234\344\270\232.md" "b/33\351\227\253\347\273\247\345\221\250/\346\237\245\350\257\242\344\275\234\344\270\232.md" deleted file mode 100644 index c674d29236192838527b930ab6e6f7e4133fd709..0000000000000000000000000000000000000000 --- "a/33\351\227\253\347\273\247\345\221\250/\346\237\245\350\257\242\344\275\234\344\270\232.md" +++ /dev/null @@ -1,125 +0,0 @@ -```mysql -create database lianxi charset utf8; -use lianxi; -create table stuinfo( -stuno char(10), -stuname varchar(10), -stusex char(6), -stuage int, -stuaddress varchar(10), -stuseat int -); -insert into stuinfo values -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'美国硅谷',2), -('s2503','马文才','男',18,'美国硅谷',3), -('s2504','欧阳俊雄','女',21,'美国硅谷',4), -('s2505','梅超风','男',16,'美国硅谷',5), -('s2506','陈旋风','男',19,'美国硅谷',6); -create table stuexam( -examno int, -stuno char(10), -wittenexam int, -labexam int -); -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); -create table stumarke( -examno int, -stuid char(10), -score int -); -insert into stumarke values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); --- 1.查询出年龄比班上平均年龄大的学生的信息 -SELECT - * -FROM - stuinfo -WHERE - stuage > ( SELECT avg( stuage ) FROM stuinfo ); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -SELECT - a.stuno,stuname,stusex,max(score) -FROM - stuinfo a - LEFT JOIN stumarke b ON a.stuno = b.stuid GROUP BY a.stuno; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -SELECT - a.stuno,stuname,stusex,round ((wittenexam+labexam)/2) -FROM - stuinfo a - LEFT JOIN stuexam b on a.stuseat = b.examno; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) --- 普通查询 -SELECT - * -FROM - stuinfo -WHERE - stusex = '男' - AND stuage >= 20; --- 子查询 -SELECT - * -FROM - stuinfo -WHERE - stuno = ( SELECT stuno FROM stuinfo WHERE stusex = '男' AND stuage >= 20); --- 5.查询出年龄比所有男生年龄都大的女生的信息 - -SELECT - * -FROM - stuinfo -WHERE - stusex = '女' - AND stuage > ( SELECT max( stuage ) FROM stuinfo WHERE stusex = '男' ); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -SELECT - a.*, - min( score ) fen -FROM - stuinfo a - LEFT JOIN stumarke b ON a.stuno = b.stuid -GROUP BY - a.stuno -HAVING - fen > 60; --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) --- 表连接 -SELECT - b.* -FROM - stumarke a - LEFT JOIN stuinfo b ON a.stuid = b.stuno -GROUP BY - a.stuid; --- in方法 -select * from stuinfo where stuno in (select stuid from stumarke group by stuid); - --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) --- --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) --- --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) --- --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) --- --- 13.查询班上比所有男生年龄都要大的女生的信息 --- --- 14.查询出只要比某个男生年龄大的女生的信息 --- -``` \ No newline at end of file diff --git "a/34 \345\210\230\346\231\272\347\277\224/20230220 mysql\346\225\260\346\215\256\350\241\250.md" "b/34 \345\210\230\346\231\272\347\277\224/20230220 mysql\346\225\260\346\215\256\350\241\250.md" deleted file mode 100644 index 39605329016a9b996a75bcdf57a844a890952412..0000000000000000000000000000000000000000 --- "a/34 \345\210\230\346\231\272\347\277\224/20230220 mysql\346\225\260\346\215\256\350\241\250.md" +++ /dev/null @@ -1,34 +0,0 @@ -```mysql --- 1、创建数据库test01_market -CREATE DATABASE test01_market; --- 2、创建表格customers -CREATE TABLE customers( -c_num INT(11), -c_name VARCHAR(50) -c_contact VARCHAR(50), -c_city VARCHAR(50), -c_birth date -); --- | 字段名 | 数据类型 | --- | --------- | ----------- | --- | c_num | int(11) | --- | c_name | varchar(50) | --- | c_contact | varchar(50) | --- | c_city | varchar(50) | --- | c_birth | date | --- --- **要求3:**将c_contact字段移动到c_birth字段后面 -ALTER TABLE customers MODIFY c_contact VARCHAR(50) after c_birth; --- **要求4:**将c_name字段数据类型改为 varchar(70) -ALTER TABLE customers MODIFY c_name VARCHAR(70); -DESC customers; --- **要求5:**将c_contact字段改名为c_phone -ALTER TABLE customer CHANGE c_contact c_phone VARCHAR(50); --- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -ALTER TABLE customers ADD c_gender CHAR(1)AFTER c_name; --- **要求7:**将表名改为customers_info -ALTER TABLE customers RENAME TO customers_info; --- **要求8:**删除字段c_city -ALTER TABLE customers_info DROP c_city; -``` - diff --git "a/34 \345\210\230\346\231\272\347\277\224/20230222 mysql\347\272\246\346\235\237.md" "b/34 \345\210\230\346\231\272\347\277\224/20230222 mysql\347\272\246\346\235\237.md" deleted file mode 100644 index ea6c4c6914e1c2143fbd1d73a2f18c6ef6565f98..0000000000000000000000000000000000000000 --- "a/34 \345\210\230\346\231\272\347\277\224/20230222 mysql\347\272\246\346\235\237.md" +++ /dev/null @@ -1,91 +0,0 @@ -## mysql - -``` my --- 1、创建数据库test01_market -CREATE DATABASE test01_market; -use test01_market; --- 2、创建表格customers -CREATE TABLE customers( -c_num INT(11), -c_name VARCHAR(50), -c_contact VARCHAR(50), -c_city VARCHAR(50), -c_birth date -); --- | 字段名 | 数据类型 | --- | --------- | ----------- | --- | c_num | int(11) | --- | c_name | varchar(50) | --- | c_contact | varchar(50) | --- | c_city | varchar(50) | --- | c_birth | date | --- --- **要求3:**将c_contact字段移动到c_birth字段后面 -ALTER TABLE customers MODIFY c_contact VARCHAR(50) after c_birth; --- **要求4:**将c_name字段数据类型改为 varchar(70) -ALTER TABLE customers MODIFY c_name VARCHAR(70); -DESC customers; --- **要求5:**将c_contact字段改名为c_phone -ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); --- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -ALTER TABLE customers ADD c_gender CHAR(1)AFTER c_name; --- **要求7:**将表名改为customers_info -ALTER TABLE customers RENAME TO customers_info; --- **要求8:**删除字段c_city -ALTER TABLE customers_info DROP c_city; - --- 1、创建数据库test02db -create database test02db; -use test02db; --- 2、创建表格pet -create table pet( -`name` varchar(20), -`owner` varchar(20), -species varchar(20), -sex char(1), -birth year, -death year -); --- | 字段名 | 字段说明 | 数据类型 | --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | -desc pet; --- 3、添加记录 -insert into pet values -('Fluffy','harold','Cat','f',2003,2010), -('Claws','gwen','Cat','m',2004,null), -('Buffy',null,'Dog','f',2009,null), -('Fang','benny','Dog','m',2000,null), -('bowser','diane','Dog','m',2003,2009), -('Chirpy',null,'Bird','f',2008,null); --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | --- 4、 添加字段主人的生日owner_birth。 -alter table pet add owner_birth year after `owner`; --- 5、 将名称为Claws的猫的主人改为kevin -update pet set `owner`='kevin' where `name`='claws'; --- 6、 将没有死的狗的主人改为duck -update pet set `owner`='duck' where death is null and species='dog'; --- 7、 查询没有主人的宠物的名字; -select `name` from pet where owner is null; --- 8、 查询已经死了的cat的姓名,主人,以及去世时间; -select `name`,`owner`,death from pet where species='cat' and death is not null; --- 9、 删除已经死亡的狗 -delete from pet where species='dog' and death is not null; --- 10、查询所有宠物信息 -select * from pet; -``` - - - diff --git "a/34 \345\210\230\346\231\272\347\277\224/20230224 mysql\350\277\220\347\256\227\347\254\246.md" "b/34 \345\210\230\346\231\272\347\277\224/20230224 mysql\350\277\220\347\256\227\347\254\246.md" deleted file mode 100644 index a07f5abee4d7ac80cea8e8598f7a17f6ad6bfc1f..0000000000000000000000000000000000000000 --- "a/34 \345\210\230\346\231\272\347\277\224/20230224 mysql\350\277\220\347\256\227\347\254\246.md" +++ /dev/null @@ -1,171 +0,0 @@ -~~~mysql -## 第1题:员工表 - -```mysql -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - - - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - -**要求1:**查询出薪资在12000~13000之间的员工信息。 - -```msql -SELECT * from employee where salary>=12000 and salary<=13000; -``` - -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -```mysql -SELECT id,name,addr from employee where name like '刘%'; -``` - -**要求3:**将“李四”的家庭住址改为“广东韶关” - -```mysql -update employee set addr ='广东韶关' where name ='李四'; -``` - -**要求4:**查询出名字中带“小”的员工 - -```mysql -SELECT * from employee where name like '%小%'; -``` - -**要求5:**查询出薪资高于11000的男员工信息 - -```mysql -SELECT * from employee where salary>11000; -``` - -**要求6:**查询没有登记电话号码的员工 - -```mysql -SELECT * from employee where tel is null; -``` - -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -```mysql -SELECT * from employee where (salary >12000) or (addr = '广东深圳' or addr ='广东广州'); -``` - -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - -```mysql -SELECT name '姓名',salary*12 '年薪' from employee; -``` - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -``` - -**要求1:** 查询大国 的国家名称、人口和面积。 - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) -- 人口至少为 2500 万(即 25000000) - -```mysql -SELECT name,population,area from countries_info where area>=3000000 or population>=25000000; -``` - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -```mysql -SELECT name,continent,area,population,gdp from countries_info where continent ='Asia'; -``` - -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -```mysql -SELECT * from countries_info where area<100000; -``` - -**要求4:**查询国家名字中包含“o“字母的国家信息 - -```mysql -SELECT * from countries_info where name like '%o%'; -``` - -**要求5:**查询GDP值超过10000000000的国家信息 - -```mysql -SELECT * from countries_info where gdp>10000000000; -``` - -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -```mysql -SELECT name '国家名', population '人口',gdp 'GDP值' from countries_info; -``` - -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - -```mysql -SELECT * from countries_info where gdp<1000; -``` - -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -```mysql -SELECT name "国家名", area "面积",population "人口", gdp "人均国土面积值" from countries_info; -~~~ - diff --git "a/34 \345\210\230\346\231\272\347\277\224/20230309 mysql\346\237\245\350\257\242.md" "b/34 \345\210\230\346\231\272\347\277\224/20230309 mysql\346\237\245\350\257\242.md" deleted file mode 100644 index 941a1f3340ee10448d0ec41e15c4f1e26419670c..0000000000000000000000000000000000000000 --- "a/34 \345\210\230\346\231\272\347\277\224/20230309 mysql\346\237\245\350\257\242.md" +++ /dev/null @@ -1,126 +0,0 @@ -```mysql -create database lianxi charset utf8; -use lianxi; -create table stuinfo( -stuno char(10), -stuname varchar(10), -stusex char(6), -stuage int, -stuaddress varchar(10), -stuseat int -); -insert into stuinfo values -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'美国硅谷',2), -('s2503','马文才','男',18,'美国硅谷',3), -('s2504','欧阳俊雄','女',21,'美国硅谷',4), -('s2505','梅超风','男',16,'美国硅谷',5), -('s2506','陈旋风','男',19,'美国硅谷',6); -create table stuexam( -examno int, -stuno char(10), -wittenexam int, -labexam int -); -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); -create table stumarke( -examno int, -stuid char(10), -score int -); -insert into stumarke values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); --- 1.查询出年龄比班上平均年龄大的学生的信息 -SELECT - * -FROM - stuinfo -WHERE - stuage > ( SELECT avg( stuage ) FROM stuinfo ); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -SELECT - a.stuno,stuname,stusex,max(score) -FROM - stuinfo a - LEFT JOIN stumarke b ON a.stuno = b.stuid GROUP BY a.stuno; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -SELECT - a.stuno,stuname,stusex,round ((wittenexam+labexam)/2) -FROM - stuinfo a - LEFT JOIN stuexam b on a.stuseat = b.examno; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) --- 普通查询 -SELECT - * -FROM - stuinfo -WHERE - stusex = '男' - AND stuage >= 20; --- 子查询 -SELECT - * -FROM - stuinfo -WHERE - stuno = ( SELECT stuno FROM stuinfo WHERE stusex = '男' AND stuage >= 20); --- 5.查询出年龄比所有男生年龄都大的女生的信息 - -SELECT - * -FROM - stuinfo -WHERE - stusex = '女' - AND stuage > ( SELECT max( stuage ) FROM stuinfo WHERE stusex = '男' ); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -SELECT - a.*, - min( score ) fen -FROM - stuinfo a - LEFT JOIN stumarke b ON a.stuno = b.stuid -GROUP BY - a.stuno -HAVING - fen > 60; --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) --- 表连接 -SELECT - b.* -FROM - stumarke a - LEFT JOIN stuinfo b ON a.stuid = b.stuno -GROUP BY - a.stuid; --- in方法 -select * from stuinfo where stuno in (select stuid from stumarke group by stuid); - --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) --- --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) --- --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) --- --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) --- --- 13.查询班上比所有男生年龄都要大的女生的信息 --- --- 14.查询出只要比某个男生年龄大的女生的信息 --- -``` - diff --git "a/37 \346\217\255\351\230\263\344\270\275/20230220 MySQL\347\232\204\345\237\272\347\241\200.md.txt" "b/37 \346\217\255\351\230\263\344\270\275/20230220 MySQL\347\232\204\345\237\272\347\241\200.md.txt" deleted file mode 100644 index 07c9357226f1412a1d1e8be999c990588a4ec7e9..0000000000000000000000000000000000000000 --- "a/37 \346\217\255\351\230\263\344\270\275/20230220 MySQL\347\232\204\345\237\272\347\241\200.md.txt" +++ /dev/null @@ -1,85 +0,0 @@ -# MySQL作业 - - - -## 第1题 --- 1、创建数据库test01_market -CREATE DATABASE test01_market; -USE test01_market; - --- 2、创建表格customers -create table customers( -c_num int(11), -c_name varchar(50), -c_contact varchar(50), -c_city varchar(50), -c_birth date -); - - - -| -- | 字段名 | 数据类型 | -| ------------------------------------------------------------ | --------- | ----------- | -| -- | c_num | int(11) | -| -- | c_name | varchar(50) | -| -- | c_contact | varchar(50) | -| -- | c_city | varchar(50) | -| -- | c_birth | date | -| -- **要求3:**将c_contact字段移动到c_birth字段后面 | | | -| alter table customers modify c_contact varchar(50) after c_birth; | | | -| -- **要求4:**将c_name字段数据类型改为 varchar(70) | | | -| alter table customers modify c_name varchar(70); | | | -- **要求5:**将c_contact字段改名为c_phone -| alter table customers change c_contact c_phone varchar(50); -| -- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -| alter table customers add c_gender char(1) after c_name; -| -- **要求7:**将表名改为customers_info -alter table customers rename to customers_info; -| -- **要求8:**删除字段c_city -| alter table customers_info drop c_city; - -## 第2题 --- - --- 1、创建数据库test02_library -create database test02_library; -use test02_library; - --- 2、创建表格books -create table books( -b_id int(11), -b_name varchar(50), -authors varchar(100), -price float, -pubdate year, -note varchar(100), -num int(11) -); - - - -| -- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------------------------------------------------------------ | ------- | -------- | ------------- | -------- | ---- | -| -- | b_id | 书编号 | int(11) | 否 | 是 | -| -- | b_name | 书名 | varchar(50) | 否 | 否 | -| -- | authors | 作者 | varchar(100) | 否 | 否 | -| -- | price | 价格 | float | 否 | 否 | -| -- | pubdate | 出版日期 | year | 否 | 否 | -| -- | note | 说明 | varchar(100) | 是 | 否 | -| -- | num | 库存 | int(11) | 否 | 否 | -| alter table books change hote note varchar(100); | | | | | | -| -- 3、向books表中插入记录 | | | | | | -| -- 1) 指定所有字段名称插入第一条记录 | | | | | | -| insert into books (b_id,b_name,`authors`,price,pubdate,note,num) VALUES (1,' | | | | | | - -# 笔记 - -##### 1.int中的(M)并不是限制长度,单独使用时,没有任何意义,因为这里M表示显示的宽度 - -##### 2.unsigned 无符号的;声明该数据列不允许负数 - -##### 3.小数(M,N)M表示限制整数+小数总长度,N表示限制小数的长度,会四舍五入 - -##### 4.insert into 表名称(字段列表)values(值列表); - -##### 5.一条insert语句同时添加多行记录 \ No newline at end of file diff --git "a/37 \346\217\255\351\230\263\344\270\275/20230222 MySQL\347\232\204\347\272\246\346\235\237.txt" "b/37 \346\217\255\351\230\263\344\270\275/20230222 MySQL\347\232\204\347\272\246\346\235\237.txt" deleted file mode 100644 index 59d7ec1229273467b0a27b4a7b7f4f80aed628cd..0000000000000000000000000000000000000000 --- "a/37 \346\217\255\351\230\263\344\270\275/20230222 MySQL\347\232\204\347\272\246\346\235\237.txt" +++ /dev/null @@ -1,285 +0,0 @@ -## 第1题 - --- 1、创建数据库test01_company -CREATE DATABASE test01_company; -use test01_company; - --- 2、创建表格offices --- - -| -- | 字段名 | 数据类型 | -| ------------------------------------------------------------ | ---------- | ------------- | -| -- | officeCode | int | -| -- | city | varchar(30) | -| -- | address | varchar(50) | -| -- | country | varchar(50) | -| -- | postalCode | varchar(25) | -| CREATE TABLE offices ( | | | -| officeCode int, | | | -| city VARCHAR(30), | | | -| address VARCHAR(50), | | | -| country VARCHAR(50), | | | -| postalCode VARCHAR(25) | | | -| ); | | | -| -- 3、创建表格employees | | | -| -- | | | -| -- | 字段名 | 数据类型 | -| -- | --------- | ------------- | -| -- | empNum | int(11) | -| -- | lastName | varchar(50) | -| -- | firstName | varchar(50) | -| -- | mobile | varchar(25) | -| -- | code | int | -| -- | jobTitle | varchar(50) | -| -- | birth | date | -| -- | Note | varchar(255) | -| -- | Sex | varchar(5) | -| CREATE TABLE employees( | | | -| empNum int(11), | | | -| lastName varchar (50), | | | -| firstName VARCHAR(50), | | | -| mobile varchar(25), | | | -| code int, | | | -| jobTitle VARCHAR(50), | | | -| birth date, | | | -| Note varchar(255), | | | -| Sex varchar(5) | | | -| ); | | | -| -- **要求4:**将表employees的mobile字段修改到code字段后面。 | | | -| ALTER table employees modify mobile VARCHAR(25) after code; | | | -| -- **要求5:**将表employees的birth字段改名为birthday; | | | -| alter table employees change birth birthday date; | | | -| -- **要求6:**修改sex字段,数据类型为char(1)。 | | | -| alter table employees modify column sex char(1); | | | -| -- **要求7:**删除字段note; | | | -| alter table employees drop column note; | | | -| -- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); | | | -| alter table employees add column favoriate_activity VARCHAR(100); | | | -| -- **要求9:**将表employees的名称修改为 employees_info | | | -| alter table employees rename employees_info; | | | - -```mysql -## 第2题 - --- --- 1、创建数据库test02db -create database test02db charset utf8; -use test02db; --- 2、创建表格pet -create table pet( -name varchar(20), -owner varchar(20), -species varchar(20), -sex char(1), -birth year, -death year -); --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | --- - --- 3、添加记录 -insert into pet values -('Fluffy','harold','Cat','f',2003,2010), -('Claws', 'gwen','Cat','m',2004,null), -('Buffy', null,'Dog','f',2009,null), -('Fang','benny','Dog','m',2000,null), -('bowser','diane','Dog','m',2003,2009), -('Chirpy',null,'Bird','f',2008,null); - --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | -| desc pet; -| -- 4、 添加字段主人的生日owner_birth。 -| alter table pet add owner_birth date; -| -- 5、 将名称为Claws的猫的主人改为kevin -| update pet set owner='kevin' where name='Claws'and species='Cat'; -| -- 6、 将没有死的狗的主人改为duck -| update pet set owner='duck' where death is null and species ='Dog'; -| -- 7、 查询没有主人的宠物的名字; -| select `name` from pet where `owner` is null; -| -- 8、 查询已经死了的cat的姓名,主人,以及去世时间; -| select `name`,`owner`,death from pet where death is not null and species ='cat'; -| -- 9、 删除已经死亡的狗 -| delete from pet where species='Dog' and death is not null; -| -- 10、查询所有宠物信息 -| select * from pet; - - --- ## 第3题 - --- 1、创建数据库:test03_company -create database test03_company charset utf8; -use test03_company ; --- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 --- A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 --- create table department( --- depid int primary key auto_increment, --- depname char(10) not null unique key, --- deinfo varchar(200) --- ); -create table department( -depid int primary key auto_increment, -depname varchar(50) not null unique key, -deinfo varchar(200) not null -); -alter table department modify deinfo varchar(100); --- B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 --- - --- * 雇员编号为主键; --- * 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); - --- * 性别默认为男; --- create table employee ( --- empid int primary key auto_increment, --- name varchar(10) not null, --- sex enum('男','女') not null default '男', --- title varchar(10), --- birthday date, --- depid int foreign key references department(depid) --- ); - - create table employee( - empid int primary key auto_increment, - name varchar(50) not null, - sex enum('男','女') not null default '男', - title varchar(10), - birthday date, - depid int , - foreign key (depid) references department(depid) -); --- C. --- 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 --- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) -create table salary( -empid int primary key auto_increment, -foreign key (empid) references employee(empid), -basesalary int, -titlesalary int, -deduction int -); - --- 4、添加数据如下: --- 部门表: --- | 部门编号 | 部门名称 | 部门简介 | --- | -------- | -------- | ------------ | --- | 111 | 生产部 | Null | --- | 222 | 销售部 | Null | --- | 333 | 人事部 | 人力资源管理 | -insert into department values -(111,'生产部',Null), -(222,'销售部',Null), -(333,'人事部','人力资源管理'); --- 雇员表: --- | 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | --- | -------- | ---- | ---- | ---------- | ---------- | ------------ | --- | 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | --- | 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | --- | 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | --- | 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | -insert into employee values -(1001,'张三','男','高级工程师','1975-1-1',111), -(1002,'李四','女','助工','1985-1-1',111), -(1003,'王五','男','工程师','1978-11-11',222), -(1004,'张六','男','工程师','1999-1-1',222); --- 工资表: --- | 雇员编号 | 基本工资 | 职务工资 | 扣除 | --- | -------- | -------- | -------- | ---- | --- | 1001 | 2200 | 1100 | 200 | --- | 1002 | 1200 | 200 | NULL | --- | 1003 | 2900 | 700 | 200 | --- | 1004 | 1950 | 700 | 150 | -insert into salary values -(1001,2200,1100,200), -(1002,1200,200,null), -(1003,2900,700,200), -(1004,1950,700,150); - - - - --- ## 第4题 --- --- 1、创建一个数据库:test04_school -create database test04_school charset utf8; -use test04_school; --- 2、创建如下表格 --- --- 表1 Department表的定义 --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | --- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | --- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | -create table Department( -DepNo int(10) primary key auto_increment not null unique key, -DepName varchar(20) not null, -DepNote varchar(50) -); --- --- 表2 Teacher表的定义 --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | Number | 教工号 | int | 是 | 否 | 是 | 是 | --- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | --- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | --- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | --- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | --- | Salary | 工资 | float | 否 | 否 | 否 | 否 | --- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | -create table Teacher( -Number int primary key not null unique key auto_increment, -Name varchar(30) not null, -Sex varchar(4), -Birth date, -DepNo int, -foreign key (DepNo) references Department(DepNo), -Salary float, -Address varchar(100) -); - --- 3、添加记录 --- --- | **DepNo** | **DepName** | **DepNote** | --- | --------- | ----------- | ------------------ | --- | 601 | 软件技术系 | 软件技术等专业 | --- | 602 | 网络技术系 | 多媒体技术等专业 | --- | 603 | 艺术设计系 | 广告艺术设计等专业 | --- | 604 | 管理工程系 | 连锁经营管理等专业 | -insert into Department values -(601,'软件技术系','软件技术等专业'), -(602,'网络技术系','多媒体技术等专业'), -(603,'艺术设计系','广告艺术设计等专业'), -(604,'管理工程系','连锁经营管理等专业'); - --- | **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | --- | ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | --- | 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | --- | 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | --- | 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | --- | 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | --- | 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | -insert into Teacher values -(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'), -(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'), -(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'), -(2004,'James','女','1980-10-20',602,3500,'四川省成都市'), -(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); --- 4、用SELECT语句查询Teacher表的所有记录。 -select * from Teacher; -``` - diff --git "a/37 \346\217\255\351\230\263\344\270\275/20230224 select\350\257\255\345\217\245.txt" "b/37 \346\217\255\351\230\263\344\270\275/20230224 select\350\257\255\345\217\245.txt" deleted file mode 100644 index 7424828e549695d5ce0ac3a1e36d04905ac2a5b7..0000000000000000000000000000000000000000 --- "a/37 \346\217\255\351\230\263\344\270\275/20230224 select\350\257\255\345\217\245.txt" +++ /dev/null @@ -1,151 +0,0 @@ -```mysql --- ## 第1题:员工表 -CREATE database top charset utf8; -use top; --- ```mysql --- drop table if exists `employee`; --- #创建employee表 --- CREATE TABLE employee( --- id INT, --- `name` VARCHAR(20), --- sex VARCHAR(20), --- tel VARCHAR(20), --- addr VARCHAR(50), --- salary FLOAT --- ); -drop table if exists `employee`; -CREATE table employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); --- #添加信息 --- INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES --- (10001,'张一一','男','13456789000','广东韶关',10010.58), --- (10002,'刘小红','女','13454319000','广东江门',12010.21), --- (10003,'李四','男','0751-1234567','广东佛山',10040.11), --- (10004,'刘小强','男','0755-5555555','广东深圳',15010.23), --- (10005,'王艳','男',NULL,'广东广州',14050.16); --- ``` - INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES - (10001,'张一一','男','13456789000','广东韶关',10010.58), - (10002,'刘小红','女','13454319000','广东江门',12010.21), - (10003,'李四','男','0751-1234567','广东佛山',10040.11), - (10004,'刘小强','男','0755-5555555','广东深圳',15010.23), - (10005,'王艳','男',NULL,'广东广州',14050.16); --- ``` --- --- --- | **id** | **name** | **sex** | **tel** | **addr** | **salary** | --- | ------ | -------- | ------- | ------------ | -------- | ---------- | --- | 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | --- | 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | --- | 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | --- | 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | --- | 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | --- --- **要求1:**查询出薪资在12000~13000之间的员工信息。 -select salary from employee where salary between 12000 and 13000; --- **要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 -select id,name,addr from employee where name like '刘%'; --- **要求3:**将“李四”的家庭住址改为“广东韶关” -update employee set addr='广东韶关' where name='李四'; -select * from employee; --- **要求4:**查询出名字中带“小”的员工 -select * from employee where name like '%小%'; --- **要求5:**查询出薪资高于11000的男员工信息 -select * from employee where sex='男' and salary>11000; --- **要求6:**查询没有登记电话号码的员工 -select * from employee where tel is null; --- **要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 -select * from employee where salary>12000 or (addr='广东深圳'and sex='男' or addr='广东广州'and sex='男'); --- **要求8:**查询每个员工的年薪,显示“姓名、年薪” - select name,salary from employee ; --- ```mysql --- --- ``` --- --- ## 第2题:国家信息表 --- --- countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 -create database way charset utf8; -use way; --- ```mysql --- DROP TABLE IF EXISTS `countries_info`; --- CREATE TABLE `countries_info`( --- `name` VARCHAR(100), --- `continent` VARCHAR(100), --- `area` INT, --- population INT, --- gdp BIGINT --- ); -DROP TABLE IF EXISTS `countries_info`; - CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT - ); --- INSERT INTO countries_info VALUES --- ('Afghanistan','Asia',652230,25500100,20343000000), --- ('Albania','Europe',28748,2831741,12960000000), --- ('Algeria','Africa',2381741,37100000,188681000000), --- ('Andorra','Europe',468,78115,3712000000), --- ('Angola','Africa',1246700,20609294,100990000000); --- ``` -INSERT INTO countries_info VALUES - ('Afghanistan','Asia',652230,25500100,20343000000), - ('Albania','Europe',28748,2831741,12960000000), - ('Algeria','Africa',2381741,37100000,188681000000), - ('Andorra','Europe',468,78115,3712000000), - ('Angola','Africa',1246700,20609294,100990000000); --- 表数据样例: --- --- ```mysql --- +-------------+-----------+---------+------------+--------------+ --- | name | continent | area | population | gdp | --- +-------------+-----------+---------+------------+--------------+ --- | Afghanistan | Asia | 652230 | 25500100 | 20343000000 | --- | Albania | Europe | 28748 | 2831741 | 12960000000 | --- | Algeria | Africa | 2381741 | 37100000 | 188681000000 | --- | Andorra | Europe | 468 | 78115 | 3712000000 | --- | Angola | Africa | 1246700 | 20609294 | 100990000000 | --- +-------------+-----------+---------+------------+--------------+ --- ``` --- --- **要求1:** 查询大国 的国家名称、人口和面积。 -select name,area,population from countries_info where area>=3000000 or population>=25000000; --- 如果一个国家满足下述两个条件之一,则认为该国是 大国 : --- --- - 面积至少为 300万平方公里(即,3000000 km2) --- --- - 人口至少为 2500 万(即 25000000) --- --- **要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 -select name,continent,area,population,gdp from countries_info where continent='Asia'; --- **要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 -select * from countries_info where area<10000 and population <100000; --- **要求4:**查询国家名字中包含“o“字母的国家信息 -select * from countries_info where name like '%o%'; --- **要求5:**查询GDP值超过10000000000的国家信息 -select * from countries_info where gdp> 10000000000; --- **要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” -select name as 国家名, -population as 人口, -gdp as GDP值, -gdp / population as 人均贡献GDP值 - from countries_info; --- **要求7:**查询人均贡献GDP值低于1000的国家信息。 -select * from countries_info where (gdp / population)<1000; --- **要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” -select name as 国家名, -population as 人口, -gdp as GDP值, -area / population as 人均国土面积值 - from countries_info; -``` - diff --git "a/37 \346\217\255\351\230\263\344\270\275/20230309 \345\255\220\346\237\245\350\257\242.txt" "b/37 \346\217\255\351\230\263\344\270\275/20230309 \345\255\220\346\237\245\350\257\242.txt" deleted file mode 100644 index cdb9872fe02be7ace41bc9e0baa8a10fe476ee8e..0000000000000000000000000000000000000000 --- "a/37 \346\217\255\351\230\263\344\270\275/20230309 \345\255\220\346\237\245\350\257\242.txt" +++ /dev/null @@ -1,79 +0,0 @@ -```my -查询作业 -create database sonselect charset utf8; -use sonselect; -create table stuinfo( -stuNo varchar(10), -stuName varchar(4), -stuSex enum('男','女'), -stuAge int, -stuAddress varchar(4), -stuSeat INT -); -create table stuExam( -examNo int, -stuNo varchar(10), -writtenExam int, -labExam INT -); -create table stuMarks( -examNo int, -stuID varchar(10), -score int -); -insert into stuinfo values -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'湖北武汉',2), -('s2503','马文才','男',18,'湖南长沙',3), -('s2504','欧阳俊雄','女',21,'湖北武汉',4), -('s2505','梅超风','男',20,'湖北武汉',5), -('s2506','陈旋风','男',19,'美国硅谷',6); -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); -insert into stuMarks VALUES -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); --- 在如图的数据表上完成以下题目 --- 1.查询出年龄比班上平均年龄大的学生的信息 -select * from stuinfo where stuAge >(select AVG(stuAge) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -select stuno,stuname,stusex,max(score) from stumarks a right join stuinfo b on a.stuid = b.stuno group by stuno,stuname,stusex; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -select stuinfo.stuNo,stuName,stuSex,avg(writtenExam+labExam)/2 考试平均分 from stuinfo left JOIN stuexam on stuinfo.stuNo=stuexam.stuNo GROUP BY stuinfo.stuNo,stuName,stuSex; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -select * from stuinfo where stuSex='男' and stuage>=20; -select * from (select * from stuinfo where stuage>=20) a where stusex='男'; --- 5.查询出年龄比所有男生年龄都大的女生的信息 -select * from stuinfo where stusex='女' AND stuage>ALL(select stuAge from stuinfo where stusex='男'); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -select * from stuinfo a INNER JOIN stumarks b on a.stuNo = b.stuID where a.stuNo != (select stuid from stumarks where score<60); --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -SELECT * FROM stuinfo a inner join stumarks b on a.stuNo = b.stuID; -select * from stuinfo a inner join (select DISTINCT stuid from stumarks) b on a.stuNo = b.stuid; -select * FROM stuinfo where stuno in (select DISTINCT stuid from stumarks); --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -SELECT * from stuinfo a left join stumarks b on a.stuNo = b.stuID where score is null; -select * from stuinfo where stuno not in (SELECT DISTINCT stuid FROM stuMarks); --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -select * from stuinfo a left join stumarks b on a.stuNo = b.stuID where score>90; -select * from stuinfo where stuno in (select stuid from stumarks where score>90); --- 10.查询出平均成绩在80分以上的学生的基本信息(stuExam) -select * from stuinfo where stuno = (select stuno from stuexam where (writtenExam+labExam)/2>80); --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuExam) --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuExam) --- 13.查询班上比所有男生年龄都要大的女生的信息 -select * from stuinfo where stuSex='女' and stuAge >ALL(select stuAge from stuinfo where stusex='男'); --- 14.查询出只是比某个男生年龄大的女生的信息 -select * from stuinfo where stuSex='女' AND stuAge >any(select stuage from stuinfo where stusex='男'); -select * from stuinfo where stuSex='女' AND stuAge >(select MIN(stuAge) from stuinfo where stusex='男'); -``` - diff --git "a/39 \351\203\255\346\202\246\350\277\216/20230216 MySQL\347\232\204\345\256\211\350\243\205\345\222\214\302\267\347\231\273\345\275\225.md" "b/39 \351\203\255\346\202\246\350\277\216/20230216 MySQL\347\232\204\345\256\211\350\243\205\345\222\214\302\267\347\231\273\345\275\225.md" deleted file mode 100644 index ea62beb8ad55011282eba136b736684226c9105b..0000000000000000000000000000000000000000 --- "a/39 \351\203\255\346\202\246\350\277\216/20230216 MySQL\347\232\204\345\256\211\350\243\205\345\222\214\302\267\347\231\273\345\275\225.md" +++ /dev/null @@ -1,191 +0,0 @@ -## MySQL数据库的卸载 - -### 步骤一:软件的卸载准备 - -学习网络编程时,TCP/IP协议程序有服务器端和客户端。mysql这个数据库管理软件是使用TCP/IP协议。我们现在要卸载的是mysql的服务器端,它没有界面。 - - 【计算】-->右键-->【管理】-->【服务】-->【mysql的服务】-->【停止】 - -### 步骤二:软件的卸载 - -**方式一:通过控制面板卸载** - -![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL卸载1.jpg) - -**方式二:通过360或电脑管家等软件卸载** - -![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL卸载2.jpg) - -![1575693828589](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/1575693828589.png) - - **方式三:通过安装包提供的卸载功能卸载** - -![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL卸载3.jpg) - -或者 - -![1575693919722](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/1575693919722.png) - -![1575693929346](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/1575693929346.png) - -![1575693936722](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/1575693936722.png) - -### 步骤三:清理残余文件 - -如果再次安装不成功,可以卸载后对残余文件进行清理后再安装。 - -(1)服务目录:mysql服务的安装目录 - -(2)数据目录:默认在C:\ProgramData\MySQL - -如果自己单独指定过数据目录,就找到自己的数据目录,例如: - -![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/清理残余文件.jpg) - -> 注意:请在卸载前做好数据备份 -> -> 在操作完以后,需要重启计算机,然后进行安装即可。**如果仍然安装失败,需要继续操作如下步骤四。** - -### 步骤四:清理注册表(选做) - -如何打开注册表编辑器:在系统的搜索框中输入regedit - -* HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL服务 目录删除 - -* HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL服务 目录删除 - -* HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL服务 目录删除 - -* HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\MySQL服务 目录删除 - -* HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL服务目录删除 - -* HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL服务删除 - -> 注册表中的ControlSet001,ControlSet002,不一定是001和002,可能是ControlSet005、006之类 - -### 步骤五:清理服务列表中的服务名 - -![1575694218753](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/1575694218753.png) - -如果在windows操作系统,删除注册表后,在服务列表中仍然存在原来的服务名,可以通过系统管理员在cmd命令行删除服务。 - -``` -sc delete 服务名 -``` - -![1575694103122](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/1575694103122.png) - -### 步骤六:清理原来的环境变量 - -找到path环境变量,将其中关于mysql的环境变量删除,**切记不要全部删除。** - -例如:删除 D:\ProgramFiles\mysql\MySQLServer5.7\bin; 这个部分 - -![1575694476072](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/1575694476072.png) - -## MySQL数据库的安装 https://dev.mysql.com/downloads/windows/installer/5.7.html - -* 双击`mysql-installer-community-5.7.28.0.msi`,进入安装界面后选择**Custom自定义安装**,点击**Next** - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装1.jpg) - -* 在左侧目录中选择**MySQL Server 5.7.28 -X64**,点击`→`加载到右侧,在选择一下要安装的产品名,在右下角会出现**Advanced Options,单击它可以设置安装路径** - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装2.jpg) - -* 例如将**安装路径**和**数据路径**修改到`D:\develop\`下,点击**OK**。注意,**安装目录避免空格和中文** - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装3.jpg) - - - -* 点击**Next下一步** - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装4.jpg) - - - -* 点击**Execute执行安装** - - 有的可能会出现提示需要先安装C++动态库等,那就先安装C++动态库,没有提示说明操作系统中有你需要的动态库。 - - ![image-20200921082804582](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/image-20200921082804582.png) - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装6.jpg) - -* 安装完成,点击**Next下一步** - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装7.jpg) - -* 点击**Next下一步** - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装8.jpg) - -* 点击**Next下一步** - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装9.jpg) - -* 将MySQL配置类型选择**Development Computer开发电脑设置**,点击**Next下一步** - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装10.jpg) - -* 设置MySQL密码,因为管理员用户为root,学习初期建议将MySQL数据库密码也设置为root,设置完成后,点击**Next下一步** - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装11.jpg) - -* 设置**Windows Service 系统服务**,设置完毕后点击**Next下一步** - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装12.jpg) - -* 日志设置,不做任何修改,点击**Next下一步** - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装13.jpg) - -* 高级设置,不做任何修改,点击**Next下一步** - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装14.jpg) - -* 点击**Execute执行设置** - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装15.jpg) - -* 安装完成,点击**Finish完成** - - ![](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/MySQL安装16.jpg) - -## MySQL数据库服务的启动和停止 - -MySQL软件的服务器端必须先启动,客户端才可以连接和使用使用数据库。 - -### 方式一:图形化方式 - -* 计算机(点击鼠标右键)》管理(点击)》服务和应用程序(点击)》服务(点击)》MySQL57(点击鼠标右键)==》启动或停止(点击) -* 控制面板(点击)》系统和安全(点击)》管理工具(点击)》服务(点击)》MySQL57(点击鼠标右键)==》启动或停止(点击) -* 任务栏(点击鼠标右键)》启动任务管理器(点击)》服务(点击)》MySQL57(点击鼠标右键)》启动或停止(点击) - -### 方式二:命令行方式 - -```cmd -启动 MySQL 服务命令: -net start MySQL57 - -停止 MySQL 服务命令: -net stop MySQL57 -``` - -## MySQL数据库环境变量的配置 - -![1575694347758](C:/Users/Administrator/Desktop/MySQL5.7安装文档.assets/1575694347758.png) - -| 环境变量名 | 操作 | 环境变量值 | -| :--------: | :--: | :----------------------------------: | -| MYSQL_HOME | 新建 | D:\ProgramFiles\mysql\MySQLServer5.7 | -| path | 编辑 | %MYSQL_HOME%\bin | - -或者直接 - -| 环境变量名 | 操作 | 环境变量值 | -| :--------: | :--: | :--------------------------------------: | -| path | 编辑 | D:\ProgramFiles\mysql\MySQLServer5.7\bin | - diff --git "a/39 \351\203\255\346\202\246\350\277\216/20230217 DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" "b/39 \351\203\255\346\202\246\350\277\216/20230217 DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" deleted file mode 100644 index d96a5b4b4d143352d157e28bafcc9a30804780e4..0000000000000000000000000000000000000000 --- "a/39 \351\203\255\346\202\246\350\277\216/20230217 DDL\345\222\214DML\350\257\255\345\217\245\347\273\203\344\271\240.md" +++ /dev/null @@ -1,342 +0,0 @@ -# 第一题: - -## -- 创建数据库test01_market - -~~~mysql -create database if not EXISTS test01_market default charset utf8; -use test01_market; -~~~ - --- 创建表格customers --- - -| -- | 字段名 | 数据类型 | | -| ---- | --------- | ----------- | ---- | -| -- | c_num | int(11) | | -| -- | c_name | varchar(50) | | -| -- | c_contact | varchar(50) | | -| -- | c_city | varchar(50) | | -| -- | c_birth | date | | - -~~~mysql -create table customers( - c_num int(11), - c_name varchar(50), - c_contact varchar(50), - c_city varchar(50), - c_birth date -); -~~~ - - - -## -- **要求3:**将c_contact字段移动到c_birth字段后面 - -~~~mysql -alter table customers MODIFY c_contact varchar(50) after c_birth; -~~~ - - - -## -- **要求4:**将c_name字段数据类型改为 varchar(70) - -~~~mysql -alter table customers modify c_name varchar(70); -~~~ - - - -## -- **要求5:**将c_contact字段改名为c_phone - -~~~mysql -alter table customers change c_contact c_phone; -~~~ - - - -## -- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -~~~mysql -alter table customers add c_gender char(1) after c_name; -~~~ - - - -## -- **要求7:**将表名改为customers_info - -~~~mysql -alter table customers rename to customers_info; -~~~ - - - -## -- **要求8:**删除字段c_city - -~~~mysql -alter table customers_info drop c_city; -~~~ - -# 第二题: - -## 1、创建数据库test02_library - -~~~mysql -create database if not exists test02_library default charset utf8; -use test02_library; -~~~ - - - -## 2、创建表格books - -| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------- | -------- | ------------- | -------- | ---- | -| b_id | 书编号 | int(11) | 否 | 是 | -| b_name | 书名 | varchar(50) | 否 | 否 | -| authors | 作者 | varchar(100) | 否 | 否 | -| price | 价格 | float | 否 | 否 | -| pubdate | 出版日期 | year | 否 | 否 | -| note | 说明 | varchar(100) | 是 | 否 | -| num | 库存 | int(11) | 否 | 否 | - -~~~mysql -create table books( - b_id int(11) comment'书编号', - b_name varchar(50) comment'书名', - authors varchar(100) comment'作者', - price float comment'价格', - pubdate year comment'出版日期', - note varchar(100)comment'说明', - num int(11) comment'库存' -); -~~~ - - - -## 3、向books表中插入记录 - -1) 指定所有字段名称插入第一条记录 - -~~~mysql -insert into books (b_id,b_name,authors,price,pubdate,note,num) values (1,'Tal of AAA','Dickes',23,1995,'novel',11); -~~~ - - - -2)不指定字段名称插入第二记录 - -~~~mysql -insert into books values (2,'EmmaT','Jane lura',35,1993,'joke',22); -~~~ - - - -3)同时插入多条记录(剩下的所有记录) - -| b_id | b_name | authors | price | pubdate | note | num | -| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -~~~mysql - -~~~ - - - -## 4、将小说类型(novel)的书的价格都增加5。 - -~~~mysql -update books set price=price+5 where note='novel'; -~~~ - - - -## 5、将名称为EmmaT的书的价格改为40。 - -~~~mysql -update books set price=40 where b_name='EmmaT'; -~~~ - - - -## 6、删除库存为0的记录 - -~~~mysql -delete from books where num=0; -~~~ - - - -# 第三题: - -1、创建数据库test03_bookstore - -~~~mysql -create database if not exists test03_library default charset utf8; -use test03_library; -~~~ - - - -2、创建book表 - -~~~mysql -create table book( - id int(11), - title varchar(100), - author varchar(100), - price double(11,2), - sales int(11), - stock int(11), - img_path varchar(100), -); -~~~ - - - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| sales | int(11) | NO | | NULL | | -| stock | int(11) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------------+------------+-------+-------+-------+----------------------------+ -| id | title | author | price | sales | stock | img_path | -+----+-------------+------------+-------+-------+-------+-----------------------------+ -| 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | -| 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | -+----+---------------+------------+-------+-------+-------+----------------------------+ -``` - -3、创建用户表users,并插入数据 - -~~~mysql -create table user( -id int(11), -username varchar(100), -passwordd varchar(100), -email varchar(100), -); -~~~ - - - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| username | varchar(100) | NO | UNI | NULL | | -| password | varchar(100) | NO | | NULL | | -| email | varchar(100) | YES | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+----------+----------------------------------+--------------------+ -| id | username | password | email | -+----+----------+----------------------------------+--------------------+ -| 1 | admin | 112233 | admin@mxdx.com | -+----+----------+----------------------------------+--------------------+ -``` - -4、创建订单表orders - -~~~mysql -create table orders( -id varchar(100), -order_time datetime, -total_count int(11), -total_amount double(11,2), -state int(11), -user_id int(11) -); -~~~ - - - -```mysql -+--------------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+--------------+--------------+------+-----+---------+-------+ -| id | varchar(100) | NO | PRI | NULL | | -| order_time | datetime | NO | | NULL | | -| total_count | int(11) | NO | | NULL | | -| total_amount | double(11,2) | NO | | NULL | | -| state | int(11) | NO | | NULL | | -| user_id | int(11) | NO | MUL | NULL | | -+--------------+--------------+------+-----+---------+-------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----------------+---------------------+-------------+--------------+-------+---------+ -| id | order_time | total_count | total_amount | state | user_id | -+----------------+---------------------+-------------+--------------+-------+---------+ -| 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | -+----------------+---------------------+-------------+--------------+-------+---------+ -``` - -5、创建订单明细表order_items - -~~~mysql -create table order_items( -id int(11), -count int(11), -amountn double(11,2), -title varchar(100), -author varchar(100), -price double(11,2), -img_path varchar(100), -order_id varchar(100) -); -~~~ - - - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| count | int(11) | NO | | NULL | | -| amount | double(11,2) | NO | | NULL | | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -| order_id | varchar(100) | NO | MUL | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------+--------+---------+---------+-------+----------------+----------------+ -| id |count| amount| title | author | price | img_path | order_id | -+----+-------+--------+------------+----------+-------+----------------+----------------+ -| 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | -| 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | -+----+-------+--------+------------+----------+-------+------------+----------------+ -``` - diff --git "a/39 \351\203\255\346\202\246\350\277\216/20230217 SQL\350\257\255\345\217\245\345\222\214\346\225\260\346\215\256\347\261\273\345\236\213.md" "b/39 \351\203\255\346\202\246\350\277\216/20230217 SQL\350\257\255\345\217\245\345\222\214\346\225\260\346\215\256\347\261\273\345\236\213.md" deleted file mode 100644 index acfa257da9b21eb0f3bd2365c94a1f3bb9640eb4..0000000000000000000000000000000000000000 --- "a/39 \351\203\255\346\202\246\350\277\216/20230217 SQL\350\257\255\345\217\245\345\222\214\346\225\260\346\215\256\347\261\273\345\236\213.md" +++ /dev/null @@ -1,698 +0,0 @@ -# 第4章 SQL语句 - -SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。 - -## 4.1 SQL的分类 - -| 名称 | 解释 | 命令 | -| :-------------------: | :-------------------------------------------: | :----------------------------------------------------------: | -| DDL (数据定义语言) | 定义和管理数据对象结构,如数据库,数据表等 | 创建(create),修改(alter),删除(drop) show(展示)结构 | -| DML (数据操作语言) | 用于操作数据库对象中所包含的数据 | 增(insert),删(delete),改(update) 数据 | -| DQL (数据查询语言) | 用于查询数据库数据 | 查(select) | -| DCL (数据控制语 言) | 用于管理数据库的语言,包括管理权限及数 据更改 | grant(授权),commit(确认),rollback(回滚) | - -其他语句:USE语句,SHOW语句,SET语句等。这类的官方文档中一般称为命令。 - -## 4.2 SQL语法规范 - -(1)mysql的sql语法不区分大小写 - -- A:数据库的表中的数据是否区分大小写。这个的话要看表格的字段的数据类型、编码方式以及校对规则。 - -​ ci(大小写不敏感),cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关,区分大小写) - -- B:sql中的关键字,比如:create,insert等,不区分大小写。但是大家习惯上把关键字都“大写”。 - - -(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 - -(3)建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) - -(4)数据库和表名、字段名等对象名中间不要包含空格 - -```mysql -create database my mxdx; - -ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mxdx' at line 1 -``` - -(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名 - -```mysql -mysql> show databases; -+--------------------+ -| Database | -+--------------------+ -| information_schema | -| mxdx | -| mysql | -| performance_schema | -| sys | -+--------------------+ -5 rows in set (0.00 sec) - -mysql> create database mxdx; -ERROR 1007 (HY000): Can't create database 'mxdx'; database exists -``` - -```mysql -mysql> show tables; -+---------------------+ -| Tables_in_mxdx | -+---------------------+ -| student | -| temp | -+---------------------+ -2 rows in set (0.00 sec) - -mysql> create table temp(id int); -ERROR 1050 (42S01): Table 'temp' already exists -``` - -``` -mysql> create table tt( - -> id int, - -> id int - -> ); -ERROR 1060 (42S21): Duplicate(重复) column name 'id' -``` - -## 4.3 SQL脚本中如何加注释 - -SQL脚本中如何加注释 - -- 单行注释:#注释内容(mysql特有的) - -- 单行注释:--空格注释内容 其中--后面的空格必须有 - -- 多行注释:/* 注释内容 */ - -```mysql -create table tt( - id int, #编号 - `name` varchar(20), -- 姓名 - gender enum('男','女') - /* - 性别只能从男或女中选择一个, - 不能两个都选,或者选择男和女之外的 - */ -); -``` - -## 4.4 mysql脚本中的标点符号 - -mysql脚本中标点符号的要求如下: - -1. 本身成对的标点符号必须成对,例如:(),'',""。 - -2. 所有标点符号必须英文状态下半角输入方式下输入。 - - -几个特殊的标点符号: - -1. 小括号(): - - 在创建表、添加数据、函数使用、子查询、计算表达式等等会用()表示某个部分是一个整体结构。 - - 思考: 2+3 * 6 =20 和 (2+3) * 6 =30的区别 - -2. 单引号'':**字符串和日期类型的数据值使用单引号''引起来**,数值类型的不需要加标点符号。 -3. “2023-10--10” -4. 双引号"":列的别名可以使用引号"",**给表名取别名不要用引号**。 -5. 在MySQL中双引号通常等价于单引号 - - -```sql -create table tt( - id int - ; - -ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2 -``` - -```mysql -create table temp( - c char -); -insert into temp values('尚) ; #缺一半单引号 - -insert into temp values(‘尚’) ; #标点符号是中文 -``` - -```mysql -mysql> select * from student; -+------+------+ -| id | name | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) - -mysql> select id "学号",name "姓名" from student; -+------+------+ -| 学号 | 姓名 | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) -``` - -# 第5章 MySQL支持的数据类型 - -## 5.1 数值类型:包括整数和小数 - -数值类型主要用来存储数字,不同的数值类型提供不同的取值范围,可以存储的值范围越大,所需要的存储空间也越大。 - -对于MySQL中的数值类型,还要做如下说明: - -- 关键字INT是INTEGER的同义词。 -- 关键字DEC和FIXED是DECIMAL的同义词。 - -### 5.1.1 整数类型 - -![image-20211127205706588](C:\Users\Administrator\Desktop\第4章 SQL语句.assets\image-20211127205706588.png) - -**说明:** - -对于整数类型,MySQL还支持在类型名称后面加小括号(M),而小括号中的M表示显示宽度,M的取值范围是(0, 255)。int(M)这个M在字段的属性中指定了unsigned(无符号)和zerofill(零填充)的情况下才有意义。表示当整数值不够M位时,用0填充。如果整数值超过M位但是没有超过当前数据类型的范围时,就按照实际位数存储。当M宽度超过当前数据类型可存储数值范围的最大宽度时,也是以实际存储范围为准。 - -```mysql -#演示整数类型 -#创建一个表格,表格的名称“t_int”, -#包含两个字段i1和i2,分别是int和int(2)类型 -#create table t_int(i1 int,i2 int(2)); -create table t_int( - i1 int, - i2 int(2) #没有unsigned zerofill,(2)没有意义 -); - -#查看当前数据库的所有表格 -show tables; -show tables from 数据库名; - -#查看表结构 -desc 表名称; -desc t_int; - -mysql> desc t_int; -+-------+------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-------+------+------+-----+---------+-------+ -| i1 | int | YES | | NULL | | -| i2 | int | YES | | NULL | | -+-------+------+------+-----+---------+-------+ -2 rows in set (0.01 sec) - -#创建一个表格,表格的名称“t_int2”, -#包含两个字段i1和i2,分别是int和int(2)类型 -create table t_int2( - i1 int, - i2 int(2) unsigned zerofill -); - -mysql> desc t_int2; -+-------+--------------------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-------+--------------------------+------+-----+---------+-------+ -| i1 | int | YES | | NULL | | -| i2 | int(2) unsigned zerofill | YES | | NULL | | -+-------+--------------------------+------+-----+---------+-------+ -2 rows in set (0.01 sec) - -#添加数据到表格中 -insert into 表名称 values(值列表); -insert into t_int values(1234,1234); -insert into t_int2 values(1234,1234); - -#查询数据 -select * from 表名称; -select * from t_int; -select * from t_int2; - -#添加数据到表格中 -insert into 表名称 values(值列表); -insert into t_int values(1,1); -insert into t_int2 values(1,1); - -insert into t_int values(12222228854225548778455,12222228854225548778455); -mysql> insert into t_int values(12222228854225548778455,12222228854225548778455); -ERROR 1264 (22003): Out of range value for column 'i1' at row - -``` - - - -### 5.1.2 小数类型 - -MySQL中使用浮点数和定点数来表示小数。 - -浮点数有两种类型:单精度浮点数(FLOAT)和双精度浮点数(DOUBLE),定点数只有DECIMAL。浮点数和定点数都可以用(M,D)来表示。 - -- M是精度,表示该值总共显示M位,包括整数位和小数位,对于FLOAT和DOUBLE类型来说,M取值范围为0~255,而对于DECIMAL来说,M取值范围为0~65。 -- D是标度,表示小数的位数,取值范围为0~30,同时必须<=M。 - -DECIMAL实际是以字符串形式存放的,在对精度要求比较高的时候(如货币、科学数据等)使用DECIMAL类型会比较好。浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围,它的缺点是会引起精度问题。 - -![image-20211127210358326](C:\Users\Administrator\Desktop\第4章 SQL语句.assets\image-20211127210358326.png) - -```mysql -#演示小数类型 -#创建表格 -create table t_double( - d1 double, - d2 double(5,2) #-999.99~999.99 -); - -#查看表结构 -desc t_double; - -#添加数据 -insert into t_double values(2.5,2.5); - -#查看数据 -select * from t_double; -mysql> select * from t_double; -+------+------+ -| d1 | d2 | -+------+------+ -| 2.5 | 2.50 |#d2字段小数点后不够2位用0补充 -+------+------+ -1 row in set (0.00 sec) - -#添加数据 -insert into t_double values(2.5526,2.5526); -insert into t_double values(2.5586,2.5586); - -mysql> select * from t_double; -+--------+------+ -| d1 | d2 | -+--------+------+ -| 2.5 | 2.50 | -| 2.5526 | 2.55 |#小数点后有截断现象,并且会四舍五入 -| 2.5586 | 2.56 |#小数点后有截断现象,并且会四舍五入 -+--------+------+ -3 rows in set (0.00 sec) - - -#添加数据 -insert into t_double values(12852.5526,12852.5526); - -#d2字段整数部分超过(5-2=3)位,添加失败 -mysql> insert into t_double values(12852.5526,12852.5526); -ERROR 1264 (22003): Out of range value for column 'd2' at row 1 - - -#创建表格 -create table t_decimal( - d1 decimal, #没有指定(M,D)默认是(10,0) - d2 decimal(5,2) -); - - -#查看表结构 -desc t_decimal; -mysql> desc t_decimal; -+-------+---------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-------+---------------+------+-----+---------+-------+ -| d1 | decimal(10,0) | YES | | NULL | | -| d2 | decimal(5,2) | YES | | NULL | | -+-------+---------------+------+-----+---------+-------+ -2 rows in set (0.01 sec) - -#添加数据 -insert into t_decimal values(2.5,2.5); - -#查看数据 -select * from t_decimal; -mysql> select * from t_decimal; -+------+------+ -| d1 | d2 | -+------+------+ -| 3 | 2.50 | #d1字段小数点后截断 -+------+------+ -1 row in set (0.00 sec) - -insert into t_decimal values(12852.5526,12852.5526); - --- 把小数赋值给整数类型的字段时,会截断小数部分,考虑四舍五入 -insert into t_int2 values(1.5,1.5); -``` - - - -## 5.2 字符串类型 - -MySQL的字符串类型有CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET等。MySQL的字符串类型可以用来存储文本字符串数据,还可以存储二进制字符串。 - -文本字符串类型: - -![image-20211127210547156](C:\Users\Administrator\Desktop\第4章 SQL语句.assets\image-20211127210547156.png) - -二进制字符串类型: - -![image-20211127210608685](C:\Users\Administrator\Desktop\第4章 SQL语句.assets\image-20211127210608685.png) - -### 1、CHAR(M)为固定长度的字符串 - -CHAR(M)为固定长度的字符串, M表示最多能存储的字符数,取值范围是0~255个字符,如果未指定(M)表示只能存储1个字符。例如CHAR(4)定义了一个固定长度的字符串列,其包含的字符个数最大为4,如果存储的值少于4个字符,右侧将用空格填充以达到指定的长度,当查询显示CHAR值时,尾部的空格将被删掉。 - -```mysql -create table temp( - c1 char, - c2 char(3) -); -``` - -```mysql -insert into temp values('男','女');#成功 - -insert into temp values('桃花岛','桃花岛');#失败 -ERROR 1406 (22001): Data too long for column 'c1' at row 1 - -insert into temp values('男','桃花岛');#成功 -``` - -### 2、VARCHAR(M)为可变长度的字符串 - -- M表示最多能存储的字符数,最大范围由字符集及M共同决定 -- M不可缺省,必须指定(M),否则报错。 -- 实际长度达不到M值时,以实际长度为准。 -- VARBINARY类型的数据除了存储数据本身外,还需要1或2个字节来存储数据的字节数。 - -```mysql -create table temp( - name varchar #错误 -); -``` - -```mysql -create table temp( - name varchar(3) #最多不超过3个字符 -); -``` - -```mysql -insert into temp values('桃花岛'); - -insert into temp values('桃花岛真好');#ERROR 1406 (22001): Data too long for column 'name' at row 1 - -insert into temp values('好'); -``` - -```mysql -drop table temp; -create table temp( - name varchar(65535) -); -#ERROR 1074 (42000): Column length too big for column 'name' (max = 21845); use BLOB or TEXT instead -因为当前的表是UTF8,一个汉字占3个字节 -``` - -![image-20211127210826463](C:\Users\Administrator\Desktop\第4章 SQL语句.assets\image-20211127210826463.png) - -**使用场景**: - -- 身份证号、手机号码、QQ号、用户名username、密码password、银行卡号等固定长度的文本字符串适合使用CHAR类型; -- 评论、朋友圈、微博不定长度的文本字符串更适合使用VARCHAR类型。 - -## 5.3 日期时间类型 - -![image-20211127212047635](C:\Users\Administrator\Desktop\第4章 SQL语句.assets\image-20211127212047635.png) - -- 如果仅仅是表示年份信息,可以只使用YEAR类型,这样更节省空间,格式为“YYYY”,例如“2022”。YEAR允许的值范围是1901~2155。 -- 如果要表示年月日,可以使用DATE类型,格式为“YYYY-MM-DD”,例如“2022-02-04”。 -- 如果要表示时分秒,可以使用TIME类型,格式为“HH:MM:SS”,例如“10:08:08”。 -- 如果要表示年月日时分秒的完整日期时间,可以使用DATATIME类型,格式为“YYYY-MM-DD HH:MM:SS”,例如“2022-02-04 10:08:08”。 -- 如果需要经常插入或更新日期时间为系统日期时间,则通常使用TIMESTAMP类型,格式为“YYYY-MM-DD HH:MM:SS”,例如“2022-02-04 10:08:08”。TIMESTAMP与DATETIME的区别在于TIMESTAMP的取值范围小,只支持1970-01-01 00:00:01 UTC至2038-01-19 03:14:07 UTC范围的日期时间值,其中UTC是世界标准时间,并且TIMESTAMP类型的日期时间值在存储时会将当前时区的日期时间值转换为时间标准时间值,检索时再转换回当前时区的日期时间值,这会更友好。而DATETIME则只能反映出插入时当地的时区,其他时区的人查看数据必然会有误差的。另外,TIMESTAMP的属性受MySQL版本和服务器SQLMode的影响很大。 - -```mysql -create table temp( - d1 datetime, - d2 timestamp -); -``` - -```mysql -insert into temp values('2021-9-2 14:45:52','2021-9-2 14:45:52'); -``` - -```mysql -#修改当前的时区 -set time_zone = '+9:00'; -``` - -```mysql -insert into temp values('202192144552','202192144552'); -#ERROR 1292 (22007): Incorrect datetime value: '202192144552' for column 'd1' at row 1 -``` - -```mysql -insert into temp values('20210902144552','20210902144552'); -``` - -```mysql -insert into temp values('2021&9&2 14%45%52','2021#9#2 14@45@52'); -``` - -```mysql -create table temp( - d year -); -``` - -```mysql -insert into temp values(2021); -insert into temp values(85); -insert into temp values(22); -insert into temp values(69); -insert into temp values(0); -insert into temp values('0'); -``` - -```mysql -mysql> select * from temp; -+------+ -| d | -+------+ -| 2021 | -| 1985 | -| 2022 | -+------+ -3 rows in set (0.00 sec) -``` - -## 5.4 Enum和Set类型 - -无论是数值类型、日期类型、普通的文本类型,可取值的范围都非常大,但是有时候我们指定在固定的几个值范围内选择一个或多个,那么就需要使用ENUM枚举类型和SET集合类型了。 - -比如性别只有“男”或“女”;上下班交通方式可以有“地铁”、“公交”、“出租车”、“自行车”、“步行”等。 - -枚举和集合类型字段声明的语法格式如下: - -- 字段名ENUM(‘值1’,‘值2’,…‘值n’) - - -- 字段名 SET(‘值1’,‘值2’,…‘值n’) - - -ENUM类型的字段在赋值时,只能在指定的枚举列表中取值,而且一次只能取一个。枚举列表最多可以有65535个成员。ENUM值在内部用整数表示,每个枚举值均有一个索引值, MySQL存储的就是这个索引编号。例如,定义ENUM类型的列(‘first’, ‘second’, ‘third’)。 - -![image-20211127211743925](C:\Users\Administrator\Desktop\第4章 SQL语句.assets\image-20211127211743925.png) - -SET类型的字段在赋值时,可从定义的值列表中选择1个或多个值的组合。SET列最多可以有64个成员。SET值在内部也用整数表示,分别是1,2,4,8……,都是2的n次方值,因为这些整数值对应的二进制都是只有1位是1,其余是0。 - -![image-20211127211806889](C:\Users\Administrator\Desktop\第4章 SQL语句.assets\image-20211127211806889.png) - - **演示枚举类型:** - -```mysql -create table temp( - gender enum('男','女'), - hobby set('睡觉','打游戏','泡妞','写代码') -); -``` - -```mysql -insert into temp values('男','睡觉,打游戏'); #成功 - -insert into temp values('男,女','睡觉,打游戏'); #失败 -#ERROR 1265 (01000): Data truncated for column 'gender' at row 1 - -insert into temp values('妖','睡觉,打游戏');#失败 -#ERROR 1265 (01000): Data truncated for column 'gender' at row 1 - -insert into temp values('男','睡觉,打游戏,吃饭'); -#ERROR 1265 (01000): Data truncated for column 'hobby' at row 1 -``` - -```mysql -#文本类型中的枚举和集合 -#枚举:固定的几个字符串值,从中选择一个 -#集合:固定的几个字符串值,从中选择任意几个 - -create table t_enum_set( - gender enum('男','女'), - hobby set('游戏','睡觉','打代码','运动') -); - -#查看表结构 -desc t_enum_set; - -mysql> desc t_enum_set; -+--------+------------------------------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+--------+------------------------------------+------+-----+---------+-------+ -| gender | enum('男','女') | YES | | NULL | | -| hobby | set('游戏','睡觉','打代码','运动') | YES | | NULL | | -+--------+------------------------------------+------+-----+---------+-------+ -2 rows in set (0.01 sec) - - -#添加数据 -insert into t_enum_set -values('男','游戏'); - -#查看数据 -select * from t_enum_set; - -#添加数据 -insert into t_enum_set -values('男,女','游戏,睡觉'); - -mysql> insert into t_enum_set - -> values('男,女','游戏,睡觉'); -ERROR 1265 (01000): Data truncated for column 'gender' at row 1 - -#添加数据 -insert into t_enum_set -values('男','游戏,睡觉'); - -#添加数据 -insert into t_enum_set -values('妖','游戏,睡觉'); -mysql> insert into t_enum_set - -> values('妖','游戏,睡觉'); -ERROR 1265 (01000): Data truncated for column 'gender' at row 1 - -#添加数据 -insert into t_enum_set -values('男','游戏,睡觉,做饭'); -mysql> insert into t_enum_set - -> values('男','游戏,睡觉,做饭'); -ERROR 1265 (01000): Data truncated for column 'hobby' at row 1 - -insert into t_enum_set -values(2, 2); - -mysql> select * from t_enum_set; -+--------+-----------+ -| gender | hobby | -+--------+-----------+ -| 男 | 游戏 | -| 男 | 游戏,睡觉 | -| 女 | 睡觉 | -+--------+-----------+ -3 rows in set (0.00 sec) - -insert into t_enum_set -values(2, 5); -#5 可以看出 1和4的组合,00001 和 0100,0101 - -insert into t_enum_set -values(2, 7); -mysql> select * from t_enum_set; -+--------+------------------+ -| gender | hobby | -+--------+------------------+ -| 男 | 游戏 | -| 男 | 游戏,睡觉 | -| 女 | 睡觉 | -| 女 | 游戏,打代码 | -| 女 | 游戏,睡觉,打代码 | -+--------+------------------+ -5 rows in set (0.00 sec) - -insert into t_enum_set -values(2, 15); -mysql> select * from t_enum_set; -+--------+-----------------------+ -| gender | hobby | -+--------+-----------------------+ -| 男 | 游戏 | -| 男 | 游戏,睡觉 | -| 女 | 睡觉 | -| 女 | 游戏,打代码 | -| 女 | 游戏,睡觉,打代码 | -| 女 | 游戏,睡觉,打代码,运动 | -+--------+-----------------------+ -6 rows in set (0.00 sec) - -insert into t_enum_set -values(2, 25); -mysql> insert into t_enum_set - -> values(2, 25); -ERROR 1265 (01000): Data truncated for column 'hobby' at row 1 -``` - -## 5.5 数据字段属性 - - **unsigned** - -- 无符号的 - -- 声明该数据列不允许负数 - - **ZEROFILL** - -- 0填充的 - -- 不足位数的用0来填充 , 如int(3),5则为005 - -**auto_increment** - -- 自动增长的 , 每添加一条数据 , 自动在上一个记录数上加 1(默认) -- 通常用于设置主键 , 且为整数类型 -- 可定义起始值和步长 - - 当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表 - - SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局) - -**NULL 和 NOT NULL** - -- 默认为NULL , 即没有插入该列的数值 -- 如果设置为NOT NULL , 则该列必须有值 - -**DEFAULT** - -- 默认的 - -- 用于设置默认值 - -- 例如,性别字段,默认为"男" , 否则为 "女" ; 若无指定该列的值 , 则默认值为"男"的值 - -- ```mysql - -- 目标 : 创建一个school数据库 - -- 创建学生表(列,字段) - -- 学号int 登录密码varchar(20) 姓名,性别varchar(2),出生日期(datatime),家庭住 址,email - -- 创建表之前 , 一定要先选择数据库 - CREATE TABLE IF NOT EXISTS `student` ( - `id` int(4) NOT NULL AUTO_INCREMENT COMMENT '学号', - `name` varchar(30) NOT NULL DEFAULT '匿名' COMMENT '姓名', - `pwd` varchar(20) NOT NULL DEFAULT '123456' COMMENT '密码', - `sex` varchar(2) NOT NULL DEFAULT '男' COMMENT '性别', - `birthday` datetime DEFAULT NULL COMMENT '生日', - `address` varchar(100) DEFAULT NULL COMMENT '地址', - `email` varchar(50) DEFAULT NULL COMMENT '邮箱', - PRIMARY KEY (`id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8 - -- 查看数据库的定义 - SHOW CREATE DATABASE school; - -- 查看数据表的定义 - SHOW CREATE TABLE student; - -- 显示表结构 - DESC student; - -- 设置严格检查模式(不能容错了) - SET sql_mode='STRICT_TRANS_TABLES'; - ``` - - \ No newline at end of file diff --git "a/39 \351\203\255\346\202\246\350\277\216/20230221 MySQL\347\272\246\346\235\237.md" "b/39 \351\203\255\346\202\246\350\277\216/20230221 MySQL\347\272\246\346\235\237.md" deleted file mode 100644 index e1dfb463dea28d62da0f61c9a133356a6b511773..0000000000000000000000000000000000000000 --- "a/39 \351\203\255\346\202\246\350\277\216/20230221 MySQL\347\272\246\346\235\237.md" +++ /dev/null @@ -1,367 +0,0 @@ -## MySQL约束 - -约束:主键、唯一、非空、默认、自增、外键 - -#### 主键约束 - -1. 关键字是primary key -2. 特点:每一个表当中只能有一个主键约束 -3. 主键约束的字段值不允许为null值 -4. 不允许重复 - -解决方法.1:单独使用一个id列当主键 - -解决方法2:复合主键 - -```mysql -create table xuanke( - sid int, - cid int, - score int, - primary key(sid,cid) #它俩组合不能为 null ,并且唯一 -); -``` - -建表后增加约束 - -```mysql -alter table 表名称 add primary key(字段列表); -``` - -如果是一个字段,就是一个字段是主键 (字段列表)如果是多个字段,就是复合主键 - -如果想要删除主键约束 - -```mysql -alter table 表名称 drop primary key; -alter table student dtop primary key; -``` - -#### 唯一键约束 - -1. 关键字:unique key -2. 特点:允许为null -3. 不能重复 -4. 一个表可以有多个唯一键约束 - -建表后增加唯一键约束 - -```mysql -alter table 表名称 add unique key (字段列表); -alter table student add unique key (sname); -``` - -如果用语句删除唯一键约束 - -```mysql -alter table 表名称 drop index 索引名; -``` - -#### 非空约束 - -```mysql -not null # 不允许为空 -``` - -#### 默认值约束 - -如果某个字段,在添加数据时未指定值时,希望不要用null处理而是按照一个默认值处理,就可以使用默认值约束 - -```mysql -default -``` - -删除score的非空约束 - -```mysql -alter table student modify score int; -``` - -增加非空约束 - -```mysql -alter table student modify score int not null; -``` - -删除gender的默认值约束 保留非空约束 - -```mysql -alter table student modify gender enum('男','女') not null; -``` - -#### 检查约束 - -MySQL5.7不支持check约束,在MySQL中开始支持check约束 - -#### 外键约束 - -约束俩个表的关系,或者是一个表的俩个字段之间的关系 - -(1)主表(父表)和从表(子表) 主表:被依赖,被参考 从表:依赖别人的,参考别人的 - -例如:学生表、课程表、选课表 选课表中的学号,它的值是依赖于学生表的学号。 选课表是从表, 学生表是主表。 选课表中的课程编号,它的值是依赖于课程表的课程编号。 选课表是从表, 课程表示主表。 - -(2)外键的建立和指定要在从表中定义 (3)关键字 foreign key (4)格式 - -```mysql -foreign key (从表的字段) references 主表(被依赖字段[主键]) -``` - -(5)要求 A:主表必须先存在 B:主表被依赖字段必须有索引,所以通常是主键列或唯一键列等才能作为被依赖字段。 C:删除表时,要么先删除从表,再删除主表,要么先解除外键约束,然后各自删除。 D:从(子)表的依赖字段的数据,必须在主(父)表被依赖字段中选择。 添加和修改都是这样的。 E:主(父)表被依赖字段的数据不能轻易的删除和修改,要看是否被引用 - -```my -外键约束等级为 on update/delete cascade /(set null) -``` - -7、自增属性 维护某个字段的值自动增长的一个属性。 它的要求: (1)一个表最多只能有一个字段是自增的 (2)自增的字段必须是整数类型 (3)自增的字段必须是键约束的字段(通常是主键、唯一键) - -自增字段赋值为null和0的时候,会自增, 如果赋值为其他的值,按照你指定的值来。 - -```mysql -ALTER TABLE 表名称 AUTO_INCREMENT = 起始值; - -``` - ---- - -## 作业 - -### 第一题 - -```mysql --- 1、创建数据库test01_company --- -CREATE DATABASE test01_company CHARSET utf8; -use test01_company; --- 2、创建表格offices - --- | 字段名 | 数据类型 | --- | ---------- | ----------- | --- | officeCode | int | --- | city | varchar(30) | --- | address | varchar(50) | --- | country | varchar(50) | --- | postalCode | varchar(25) | -CREATE TABLE offices( -officecode int, -city VARCHAR(30), -address varchar(50), -country VARCHAR(50), -postalcode VARCHAR(25)); --- 3、创建表格employees --- --- | 字段名 | 数据类型 | --- | --------- | ------------- | --- | empNum | int(11) | --- | lastName | varchar(50) | --- | firstName | varchar(50) | --- | mobile | varchar(25) | --- | code | int | --- | jobTitle | varchar(50) | --- | birth | date | --- | Note | varchar(255) | --- | Sex | varchar(5) | -CREATE table employees( -empNum int, -lastName VARCHAR(50), -firstName VARCHAR(50), -mobile VARCHAR(25), -code int, -jobTitle VARCHAR(50), -birth date, -Note VARCHAR(50), -Sex VARCHAR(5)); --- **要求4:**将表employees的mobile字段修改到code字段后面。 -alter table employees MODIFY mobile VARCHAR(25) after code; --- **要求5:**将表employees的birth字段改名为birthday; -alter table employees change birth birthday date; --- **要求6:**修改sex字段,数据类型为char(1)。 -alter table employees MODIFY sex char(1); --- **要求7:**删除字段note; -alter table employees drop note; --- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); -alter table employees add favoriate_activity varchar(100); --- **要求9:**将表employees的名称修改为 employees_info -alter table employees rename to employees_info; -``` - -### 第二题 - -```mysql --- 1、创建数据库test02db -CREATE DATABASE test02db; --- 2、创建表格pet -use test02db; --- | 字段名 | 字段说明 | 数据类型 | --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | -CREATE TABLE pet( -name VARCHAR(20), -owner VARCHAR(20), -species VARCHAR(20), -sex char(1), -birth year, -death year); --- 3、添加记录 --- --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | -INSERT into pet VALUES('Fluffy','harold','Cat','f',2003,2010),('Claws','gwen','Cat','m',2004,null),('Buffy',null,'Dog','f',2009,null),('Fang','benny','Dog','m',2000,null),('bowser','diane','Dog','m',2003,2009),('Chirpy',null,'Bird','f',2008,null); -SELECT * from pet; --- 4、 添加字段主人的生日owner_birth。 -alter table pet add owner_birth VARCHAR(10); --- 5、 将名称为Claws的猫的主人改为kevin -UPDATE pet set owner='kevin' WHERE name='Claws'; -SELECT * from pet; --- 6、 将没有死的狗的主人改为duck -UPDATE pet set owner='duck' WHERE name='Fang'; -SELECT * from pet; --- 7、 查询没有主人的宠物的名字; -SELECT * from pet where isnull(owner); -SELECT owner from pet where isnull; --- 8、 查询已经死了的cat的姓名,主人,以及去世时间; -select name,owner,death from pet where death !='' and species='Cat'; --- 9、 删除已经死亡的狗 -delete FROM pet where death !=''and species='Dog'; --- 10、查询所有宠物信息 -SELECT * from pet; -``` - -### 第三题 - -```mysql --- 1、创建数据库:test03_company -create database test03_company charset utf8; --- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 --- A.部门表(department): --- 部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 -use test03_company ; -create table department( -depid int primary key auto_increment, -depname char(10) not null unique key, -deinfo varchar(200) -); --- B.雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 --- * ​ 雇员编号为主键; --- * ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); --- * ​ 性别默认为男; -create table employee ( -empid int primary key auto_increment, -name varchar(10) not null, -sex enum('男','女') not null default '男', -title varchar(10), -birthday date, -depid int, -foreign key (depid) references department(depid) -); - --- C.工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - --- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) -CREATE table salary( -empid int PRIMARY key auto_increment, -basesalary VARCHAR(50), -titlesalary VARCHAR(50), -deduction VARCHAR(50), -FOREIGN key (empid) REFERENCES employee(empid) -); --- 4、添加数据如下: --- 部门表: --- | 部门编号 | 部门名称 | 部门简介 | --- | -------- | -------- | ------------ | --- | 111 | 生产部 | Null | --- | 222 | 销售部 | Null | --- | 333 | 人事部 | 人力资源管理 | -insert into department VALUES(111,'生产部',null),(222,'销售部',null),(333,'人事部','人力资源管理'); --- 雇员表: - --- | 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | --- | -------- | ---- | ---- | ---------- | ---------- | ------------ | --- | 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | --- | 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | --- | 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | --- | 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | -INSERT into employee VALUES(1001,'张三','男','高级工程师','1975-1-1',111),(1002,'李四','女','助工','1985-1-1',111),(1003,'王五','男','工程师','1978-11-11',222),(1004,'张六','男','工程师','1999-1-1',222); --- 工资表: - --- | 雇员编号 | 基本工资 | 职务工资 | 扣除 | --- | -------- | -------- | -------- | ---- | --- | 1001 | 2200 | 1100 | 200 | --- | 1002 | 1200 | 200 | NULL | --- | 1003 | 2900 | 700 | 200 | --- | 1004 | 1950 | 700 | 150 | -insert into salary VALUES(1001,2200,1100,200),(1002,1200,200,null),(1003,2900,700,200),(1004,1950,700,150); -``` - -### 第四题 - -```mysql --- 1、创建一个数据库:test04_school --- -CREATE DATABASE test04_school CHARSET utf8; --- 2、创建如下表格 --- --- 表1 Department表的定义 --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | --- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | --- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | -use test04_school; -CREATE table department( -DepNo int not null PRIMARY key unique key, -DepName VARCHAR(50) not null, -DepNote varchar(50)); --- 表2 Teacher表的定义 --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | Number | 教工号 | int | 是 | 否 | 是 | 是 | --- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | --- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | --- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | --- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | --- | Salary | 工资 | float | 否 | 否 | 否 | 否 | --- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | -CREATE table teacher( -Number int not null primary key unique key, -Name VARCHAR(30)not null, -Sex varchar(4), -Birth date, -DepNo int, -Salary float, -Address varchar(100), -FOREIGN key (DepNo)REFERENCES department(DepNo)); --- 3、添加记录 --- --- | **DepNo** | **DepName** | **DepNote** | --- | --------- | ----------- | ------------------ | --- | 601 | 软件技术系 | 软件技术等专业 | --- | 602 | 网络技术系 | 多媒体技术等专业 | --- | 603 | 艺术设计系 | 广告艺术设计等专业 | --- | 604 | 管理工程系 | 连锁经营管理等专业 | -INSERT into department VALUES(601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'),(603,'艺术设计系','广告艺术设计等专业'),(604,'管理工程系','连锁经营管理等专业'); --- | **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | --- | ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | --- | 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | --- | 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | --- | 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | --- | 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | --- | 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | -INSERT into teacher VALUES(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'),(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'),(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'),(2004,'James','女','1980-10-20',602,3500,'四川省成都市'),(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); --- 4、用SELECT语句查询Teacher表的所有记录。 -SELECT*from teacher; -``` - diff --git "a/39 \351\203\255\346\202\246\350\277\216/20230223 \346\237\245\350\257\242select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" "b/39 \351\203\255\346\202\246\350\277\216/20230223 \346\237\245\350\257\242select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" deleted file mode 100644 index daf9a22502952d404bbcc01d61956bb04121ceee..0000000000000000000000000000000000000000 --- "a/39 \351\203\255\346\202\246\350\277\216/20230223 \346\237\245\350\257\242select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" +++ /dev/null @@ -1,294 +0,0 @@ -# 2.23 查询select语句和运算符 - -### select语句格式: - -```mysql -SELECT 字段列表 FROM 表名称; - -SELECT 字段列表 FROM 表名称 WHERE 条件; -``` - -### 使用别名(临时名称) - -```mysql -select 字段名1 as "别名1", 字段名2 as "别名2" from 表名称 as 别名; -``` - -- 列的别名有空格时,请加双引号。**==列的别名==中没有空格时,双引号可以加也可以不加**。 -- ==**表的别名不能加双引号**==,表的别名中间不能包含空格。 -- as大小写都可以,as也完全可以省略。 - -```mysql -示例: -mysql> select id "学号",name "姓名" from student; -+------+------+ -| 学号 | 姓名 | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) - -mysql> select id 学号,name 姓名 from student; -+------+------+ -| 学号 | 姓名 | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) -``` - -### 结果去重 - -mysql可以在查询结果中使用distinct关键字去重。 - -```mysql -select distinct 字段列表 from 表名称 【where 条件】; - -示例: -select distinct did from t_employee; -``` - -### 算术运算符 - -```mysql -加:+ - 在MySQL +就是求和,没有字符串拼接 -减:- -乘:* -除:/ div(只保留整数部分) - div:两个数相除只保留整数部分 - /:数学中的除 -模:% mod - -mysql中没有 +=等运算符 -``` - -### 比较运算符 - -```mysql -大于:> -小于:< -大于等于:>= -小于等于:>= -等于:= 不能用于null判断 -不等于:!= 或 <> 不能用于null判断 -判断是null 用 is null 或 用 <=> null -判断不是null is not null -``` - -### 区间或集合范围比较运算符 - -```mysql -区间范围:between x and y - not between x and y -集合范围:in (x,x,x) - not in(x,x,x) -between ... and ... 结果包含两端的边界 - -示例: -#查询薪资在[10000,15000] -select * from t_employee where salary>=10000 && salary<=15000; -select * from t_employee where salary between 10000 and 15000; - -#查询籍贯在这几个地方的 -select * from t_employee where work_place in ('北京', '浙江', '江西'); - -#查询薪资不在[10000,15000] -select * from t_employee where salary not between 10000 and 15000; - -#查询籍贯不在这几个地方的 -select * from t_employee where work_place not in ('北京', '浙江', '江西'); -``` - -### 模糊匹配比较运算符 - -%:代表任意个字符 - -_:代表一个字符,如果两个下划线代表两个字符 - -```mysql -示例: -#查询名字中包含'冰'字 -select * from t_employee where ename like '%冰%'; - -#查询名字以‘雷'结尾的 -select * from t_employee where ename like '%远'; - -#查询名字以’李'开头 -select * from t_employee where ename like '李%'; - -#查询名字有冰这个字,但是冰的前面只能有1个字 -select * from t_employee where ename like '_冰%'; - -#查询当前mysql数据库的字符集情况 -show variables like '%character%'; -``` - -### 逻辑运算符 - -```mysql -逻辑与:&& 或 and -逻辑或:|| 或 or -逻辑非:! 或 not -逻辑异或: xor - -示例: -#查询薪资高于15000,并且性别是男的员工 -select * from t_employee where salary>15000 and gender='男'; -select * from t_employee where salary>15000 && gender='男'; - -select * from t_employee where salary>15000 & gender='男';#错误得不到值 &按位与 -select * from t_employee where (salary>15000) & (gender='男'); - -#查询薪资高于15000,或者did为1的员工 -select * from t_employee where salary>15000 or did = 1; -select * from t_employee where salary>15000 || did = 1; - -#查询薪资不在[15000,20000]范围的 -select * from t_employee where salary not between 15000 and 20000; -select * from t_employee where !(salary between 15000 and 20000); - -#查询薪资高于15000,或者did为1的员工,两者只能满足其一 -select * from t_employee where salary>15000 xor did = 1; -select * from t_employee where (salary>15000) ^ (did = 1); -``` - -### 关于null值的问题、 - -```mysql -#(1)判断时 -xx is null -xx is not null -xx <=> null - -#(2)计算时 -ifnull(xx,代替值) 当xx是null时,用代替值计算 - -示例: -#查询员工的实发工资,实发工资 = 薪资 + 薪资 * 奖金比例 -select ename , salary + salary * commission_pct "实发工资" from t_employee; #失败,当commission_pct为null,结果都为null - -select ename ,salary , commission_pct, salary + salary * ifnull(commission_pct,0) "实发工资" from t_employee; -``` - -### 位运算符 - -```mysql -左移:<< -右移:>> -按位与:& -按位或:| -按位异或:^ -按位取反:~ -``` - - - -# 作业 - -## 第1题:员工表 -```mysql -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); - -| -- | **id** | **name** | **sex** | **tel** | **addr** | **salary** | | -| ---- | ------ | -------- | ------- | ------------ | -------- | ---------- | ---- | -| -- | 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | | -| -- | 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | | -| -- | 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | | -| -- | 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | | -| -- | 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | | - --- --- **要求1:**查询出薪资在12000~13000之间的员工信息。 -select * from employee where salary between 12000 and 13000; --- **要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 -select id,`name`,addr from employee where `name` like '刘%'; --- **要求3:**将“李四”的家庭住址改为“广东韶关” -UPDATE employee SET addr = '广东韶关' WHERE `name` = '李四'; --- **要求4:**查询出名字中带“小”的员工 -select * from employee --- **要求5:**查询出薪资高于11000的男员工信息 -select `name` from employee where salary>11000 and sex='男'; --- **要求6:**查询没有登记电话号码的员工 -SELECT `name` FROM employee WHERE tel is NULL; --- **要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 -SELECT `name` FROM employee WHERE sex = '男' AND salary = 12000 OR addr = '广东深圳' OR addr='广东广州'; --- **要求8:**查询每个员工的年薪,显示“姓名、年薪” -select `name`,salary from employee; -``` - - - -```mysql -## 第2题:国家信息表 - --- countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); - --- 表数据样例: --- +-------------+-----------+---------+------------+--------------+ --- | name | continent | area | population | gdp | --- +-------------+-----------+---------+------------+--------------+ --- | Afghanistan | Asia | 652230 | 25500100 | 20343000000 | --- | Albania | Europe | 28748 | 2831741 | 12960000000 | --- | Algeria | Africa | 2381741 | 37100000 | 188681000000 | --- | Andorra | Europe | 468 | 78115 | 3712000000 | --- | Angola | Africa | 1246700 | 20609294 | 100990000000 | - --- +-------------+-----------+---------+------------+--------------+ --- - --- **要求1:** 查询大国 的国家名称、人口和面积。 --- 如果一个国家满足下述两个条件之一,则认为该国是大国 : --- - 面积至少为 300万平方公里(即,3000000 km2) --- - 人口至少为 2500 万(即 25000000) -SELECT `name`,area,population FROM countries_info WHERE area>3000000 OR population>=25000000; --- **要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - SELECT * FROM countries_info WHERE continent = 'Asia'; --- **要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 -SELECT * FROM countries_info WHERE area<10000 AND population<100000; --- **要求4:**查询国家名字中包含“o“字母的国家信息 -SELECT * FROM countries_info WHERE `name` LIKE '%o%'; --- **要求5:**查询GDP值超过10000000000的国家信息 -SELECT * FROM countries_info WHERE gdp>10000000000; --- 要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” -SELECT `name` 国家名,population 人口,gdp GDP值,gdp/population AS 人均贡献GDP值 FROM countries_info; --- 要求7:**查询人均贡献GDP值低于1000的国家信息。 -SELECT * FROM countries_info WHERE gdp/population<1000; --- 要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” -SELECT `name` 国家名,population 人口,gdp GDP值,area/population AS 人均国土面积值 FROM countries_info; -``` - diff --git "a/39 \351\203\255\346\202\246\350\277\216/20230307 \345\255\220\346\237\245\350\257\242.md" "b/39 \351\203\255\346\202\246\350\277\216/20230307 \345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index 5f9296e828a1c053808935892db3c16aa3862ea0..0000000000000000000000000000000000000000 --- "a/39 \351\203\255\346\202\246\350\277\216/20230307 \345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,228 +0,0 @@ -# 子查询 - --- 什么是子查询 --- 嵌套在其它SQL语句中的查询语句, --- 子查询通常先运行,所以要用()包括起来 --- 子查询的运行结果,可以做为其它语句的条件、数据源等 - -select ① from ③ where ②; - - - -> ```mysql -> ### 形式一,放在select 后面 -> -> #(1)在“t_employee”表中查询每个人薪资和公司平均薪资的差值, -> #并显示员工薪资和公司平均薪资相差5000元以上的记录。 -> -- select salary-avg(salary) from t_employee;# 错误,只有一行 -> -> **第一步,查出公司平均薪资是多少钱** -> select avg(salary) from t_employee; -> **第二步** -> -- SELECT ename,salary, -> -- salary-(select avg(salary) from t_employee) avgnum -> -- from t_employee -> -- where avgnum > 5000; -> -- 1054 - Unknown column 'avgnum' in 'where clause' -> -- where 是不能用别名和聚合函数,having 才支持别名和聚合函数 -> -> SELECT ename,salary, -> salary-(select avg(salary) from t_employee) avgnum -> from t_employee -> where abs(salary-(select avg(salary) from t_employee)) > 5000;-- ABS(X) 取x绝对值 -> -> #(2)在“t_employee”表中查询每个部门平均薪资和公司平均薪资的差值。 -> -> 1. ##### 第一步,根据部门编号,分组,查询每个部门的平均薪资 -> -> select ifnull(did,'编外') 部门编号,round(abs(avg(salary)-(select avg(salary) from t_employee) ),2) 差值 -> from t_employee -> group by did; -> ``` -> -> - -> ```mysql -> > ### 形式二,放在where / having 后面 -> -> #(1)在“t_employee”表中查询薪资最高的员工姓名(ename)和薪资(salary)。 -> -> **第一步,找出最大的薪资是多少钱** -> -> select max(salary) from t_employee; -> -> **第二步,查询谁的薪资=最大的薪资** -> -> select ename,salary from t_employee where salary=(select max(salary) from t_employee); -> -> #(2)在“t_employee”表中查询比全公司平均薪资高的男员工姓名和薪资。 -> -> **第一步,查平均薪资是多少钱** -> -> select avg(salary) from t_employee; -> -> **第二步,查询谁的薪资>平均薪资 and gender='男'** -> -> select ename,salary from t_employee where salary>(select avg(salary) from t_employee) and gender='男'; -> -> #(3)在“t_employee”表中查询和“白露”,“谢吉娜”同一部门的员工姓名和电话。 -> -> **第一步,查询“白露”,“谢吉娜”她们的部门编号did** -> -> select did from t_employee where ename = '白露' or ename = '谢吉娜'; -> -> **第二步,查询谁的部门编号和她们两一样** -> -> select * from t_employee where did = (select did from t_employee where ename = '白露' or ename = '谢吉娜'); -> -> #> 1242 - Subquery (子查询) returns 返回 more than 1 row 超出1行的记录 -> select ename,tel from t_employee where did in (select did from t_employee where ename = '白露' or ename = '谢吉娜'); -> -> select ename,tel from t_employee where did = any (select did from t_employee where ename = '白露' or ename = '谢吉娜'); -> -> -> -> -> /* -> 总结: -> where或having后的子查询,其子查询的结果有三种形式 -> 1,单列单个值 ,可直接使用用=,>,<,>=,<=,!=这些比较运算符 -> 2,单列多个值,可使用in,not in进行比较 -> 3,单列多个值,可以用=,>,<,>=,<=,!=,搭配any,all,等关键字与查询结果进行比较 -> */ -> -> -> /* -> 聚合函数是对多行数据的运算, -> group by 一般要结合聚合函数使用。 -> */ -> ``` -> -> - -```mysql -# 形式三,放在from后面,子查询当作一个临时表使用,必须要给别名** - -#(1)查询每个部门的部门编号、部门名称、部门平均薪资。 - -# 分析 部门名称在deparment部门表中,而薪资在员工表中。,所以要联表查询 - --- 方案一,先联表,再分组 -SELECT b.did,dname,avg(salary) as 平均薪资 -from t_employee a right join t_department b on a.did=b.did -group by b.did; - --- 方案二,先分组,再联表 -select b.did,dname,num -from (select did,avg(salary) num from t_employee group by did) as a right join t_department b on a.did=b.did - order by b.did -; -- group by 一般要结合聚合函数使用。 - -/* - 子查询的结果是单列:可以放在select 参与运算,或是作为字段,也可以放where/having后当条件 - 如果是多列,多个值,只能放在from 后面当一个临时表使用,并且必须要给这个表取别名 -*/ -``` - -# 作业 - -```mysql - -题目 -create table stuinfo( -stuNO varchar(20) primary key, -stuName varchar(20), -stuSex varchar(20), -stuAge int, -stuAddress varchar(20), -stuSeat int -); - -create table stuExam( -examNO int auto_increment primary key, -stuNO varchar(20), -writtenExam int, -labExam int -); - -create table stuMarks( -examNO int, -stuID varchar(20), -score int, -constraint en foreign key(examno) references stuexam(examno) -); - -insert into stuinfo values -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'湖北武汉',2), -('s2503','马文才','男',18,'湖南长沙',3), -('s2504','欧阳俊雄','女',21,'湖北武汉',4), -('s2505','梅超风','男',16,'湖北武汉',5), -('s2506','陈旋风','男',19,'美国硅谷',6); - - -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); - - -insert into stumarks values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); - --- 1.查询出年龄比班上平均年龄大的学生的信息 -select AVG(stuAge) from stuinfo; -select stuName,stuAge from stuinfo where stuAge>(select AVG(stuAge) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -select i.stuno,stuName,stusex,m.sc from stuinfo i,(select stuid, max(score) sc from stumarks group by stuid) m where i.stuNO=m.stuID ; - --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -select si.stuNO,stuname,stusex,round((avg(se.writtenExam+se.labExam)/2),2) 平均值 from stuinfo si,stuexam se where si.stuNO=se.stuNO group by stuno; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -# 普通查询 -select * from stuinfo where stuSex='男' and stuAge>=20; -#子查询 -select stuName,stuAge,stuSex from stuinfo where stuName in( -select stuName from stuinfo where stuSex='男' and stuAge>=20); --- 5.查询出年龄比所有男生年龄都大的女生的信息 -select MAX(stuAge) from stuinfo WHERE stuSex='男'; -select stuName,stuAge from stuinfo where stuSex='女' and stuAge>(select MAX(stuAge) from stuinfo WHERE stuSex='男'); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -select distinct si.* from stuinfo si right join stumarks sm on si.stuNO=sm.stuID where stuno != (select stuid from stumarks where score<60) ; --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMark) -#方法一:表连接 - select distinct si.* - from - stuinfo si right join stumarks sm - on si.stuNO=sm.stuID; - - #方法二:in - select * - from - stuinfo - where - stuno in(select distinct stuid from stumarks); --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -select * from stuinfo where stuno in(select stuid from stumarks where score >'90'); --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -select * from stuinfo where stuno = (select stuid from (select stuid,AVG(score) a from stumarks group by stuid )s where a>80); --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) - --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) - --- 13.查询班上比所有男生年龄都要大的女生的信息 -select * from stuinfo where stuAge > all (select stuAge from stuinfo where stuSex='男') and stuSex='女'; --- 14.查询出只要比某个男生年龄大的女生的信息 -select * from stuinfo where stuAge > any (select stuAge from stuinfo where stuSex='男') and stuSex='女'; -``` - diff --git "a/40 \346\227\266\345\255\246\345\256\211/20230220 \346\225\260\346\215\256\345\272\223.md" "b/40 \346\227\266\345\255\246\345\256\211/20230220 \346\225\260\346\215\256\345\272\223.md" deleted file mode 100644 index 5209d4118548aa9cff677436e70f7c8ea6914ef4..0000000000000000000000000000000000000000 --- "a/40 \346\227\266\345\255\246\345\256\211/20230220 \346\225\260\346\215\256\345\272\223.md" +++ /dev/null @@ -1,10 +0,0 @@ -# 作业 - -## 第二题 - -CREATE DATABASE test01_market use test01_market CREATE TABLE customers( c_num int(11), c_name varchar(50), c_contact varchar(50), c_city varchar(50), c_birth date ); -- 要求3:将c_contact字段移动到c_birth字段后面 alter table customers MODIFY c_contact VARCHAR(50) AFTER c_birth; -- 要求4:将c_name字段数据类型改为 varchar(70) ALTER TABLE customers MODIFY c_name varchar(70); -- 要求5:将c_contact字段改名为c_phone ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); -- 要求6:增加c_gender字段到c_name后面,数据类型为char(1) ALTER TABLE customers ADD c_gender char(1) AFTER c_name; -- 要求7:将表名改为customers_info ALTER TABLE customers RENAME TO customers_info; -- 要求8:删除字段c_city ALTER TABLE customers_info DROP c_city; - -## 第三题 - -CREATE DATABASE test02_library use test02_library CREATE TABLE books( b_id INT(11) NOT NULL UNIQUE, b_name VARCHAR(50) NOT NULL, authors VARCHAR(100) NOT NULL, price FLOAT NOT NULL, pubdate year NOT NULL, note VARCHAR(100) NULL, num int(11) NOT NULL ); INSERT INTO books (b_id,b_name,authors,price,pubdate,note,num) VALUES (1,'talofaaa','dickes',23,'1995','novel',11); INSERT INTO books VALUES(2,'EmmaT','Jane lura',35,'1993','joke',22); INSERT INTO books VALUES(3,'Story of Jane','Jane Tim',40,'2001','novel',0); INSERT INTO books VALUES(4,'Lovey Day','George Byron',20,'2005','novel',30); INSERT INTO books VALUES(5,'Old land','Honore Blade',30,'2010','law',0); INSERT INTO books VALUES(6,'The Battle','Upton Sara',30,'1999','medicine',40); INSERT INTO books VALUES(7,'Rose Hood','Richard haggard',28,'2008','cartoon',28); UPDATE books set price=price+5 WHERE note='novel'; UPDATE books SET price=40 WHERE b_name='EmmaT'; DELETE from books where num=0; -CREATE DATABASE test03_bookstore use test03_bookstore CREATE TABLE book( id int(11) NO NULL, title varchar(100) NO NULL, author varchar(100) NO NULL, price double(11,2) NO NULL, sales int(11) NO NULL, stockint(11) NO NULL, img_path varchar(100) NO NULL ); INSERT INTO book VALUES (1,'解忧杂货店','东野圭吾',27.2,102,98,'upload/books/解忧杂货店.jpg'),(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg') CREATE TABLE users( id int(11) uner \ No newline at end of file diff --git "a/41 \345\221\250\344\272\232\350\276\211/20230220 mysql\346\225\260\346\215\256\350\241\250.md.md" "b/41 \345\221\250\344\272\232\350\276\211/20230220 mysql\346\225\260\346\215\256\350\241\250.md.md" deleted file mode 100644 index 39605329016a9b996a75bcdf57a844a890952412..0000000000000000000000000000000000000000 --- "a/41 \345\221\250\344\272\232\350\276\211/20230220 mysql\346\225\260\346\215\256\350\241\250.md.md" +++ /dev/null @@ -1,34 +0,0 @@ -```mysql --- 1、创建数据库test01_market -CREATE DATABASE test01_market; --- 2、创建表格customers -CREATE TABLE customers( -c_num INT(11), -c_name VARCHAR(50) -c_contact VARCHAR(50), -c_city VARCHAR(50), -c_birth date -); --- | 字段名 | 数据类型 | --- | --------- | ----------- | --- | c_num | int(11) | --- | c_name | varchar(50) | --- | c_contact | varchar(50) | --- | c_city | varchar(50) | --- | c_birth | date | --- --- **要求3:**将c_contact字段移动到c_birth字段后面 -ALTER TABLE customers MODIFY c_contact VARCHAR(50) after c_birth; --- **要求4:**将c_name字段数据类型改为 varchar(70) -ALTER TABLE customers MODIFY c_name VARCHAR(70); -DESC customers; --- **要求5:**将c_contact字段改名为c_phone -ALTER TABLE customer CHANGE c_contact c_phone VARCHAR(50); --- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -ALTER TABLE customers ADD c_gender CHAR(1)AFTER c_name; --- **要求7:**将表名改为customers_info -ALTER TABLE customers RENAME TO customers_info; --- **要求8:**删除字段c_city -ALTER TABLE customers_info DROP c_city; -``` - diff --git "a/41 \345\221\250\344\272\232\350\276\211/20230223 mysql\347\272\246\346\235\237.md.md" "b/41 \345\221\250\344\272\232\350\276\211/20230223 mysql\347\272\246\346\235\237.md.md" deleted file mode 100644 index 16e62f33e6d34a42b6d657baf11fd0143926f1ea..0000000000000000000000000000000000000000 --- "a/41 \345\221\250\344\272\232\350\276\211/20230223 mysql\347\272\246\346\235\237.md.md" +++ /dev/null @@ -1,186 +0,0 @@ -## mysql - -````mysql -## 第1题 --- 1、创建数据库test01_company -create database test01_company -use test01_company --- 2、创建表格offices -| 字段名 | 数据类型 | -| ---------- | ----------- | -| officeCode | int | -| city | varchar(30) | -| address | varchar(50) | -| country | varchar(50) | -| postalCode | varchar(25) | -create table offices( -officecode INT, -city varchar(30), -address varchar(50), -country varchar(50), -postalcode varchar(25) -); -use test01_company --- 3、创建表格employees -| 字段名 | 数据类型 | -| ------------- | ---------------------------- | -| empNum | int(11) | -| lastName | varchar(50) | -| firstName | varchar(50) | -| mobile | varchar(25) | -| code | int | -| jobTitle | varchar(50) | -| birth | date | -| Note | varchar(255) | -| Sex | varchar(5) | -create table employees( -empnum int, -lasename varchar(50), -firstname varchar(50), -mobile varchar(25), -`code` INT, -jobtitle varchar(50), -birth date, -note varchar(255), -sex varchar(5) -); --- **要求4:**将表employees的mobile字段修改到code字段后面。 -alter table employees modify mobile varchar(25) after code; --- **要求5:**将表employees的birth字段改名为birthday; -alter table employees change birth birthday date; --- **要求6:**修改sex字段,数据类型为char(1)。 -alter table employees modify sex char(1);\ --- **要求7:**删除字段note; -alter table employees drop note; --- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); -alter table employees add favoriate_activity varchar(100); --- **要求9:**将表employees的名称修改为 employees_info -alter table employees rename to employees_info -## 第2题 --- 1、创建数据库test02db -create database test02db; -use test02db; --- 2、创建表格pet -create table pet( -`name` varchar(20), -`owner` varchar(20), -species varchar(20), -sex char(1), -birth year, -death year -); --- | 字段名 | 字段说明 | 数据类型 | --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | -desc pet; --- 3、添加记录 -insert into pet values -('Fluffy','harold','Cat','f',2003,2010), -('Claws','gwen','Cat','m',2004,null), -('Buffy',null,'Dog','f',2009,null), -('Fang','benny','Dog','m',2000,null), -('bowser','diane','Dog','m',2003,2009), -('Chirpy',null,'Bird','f',2008,null); --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | --- 4、 添加字段主人的生日owner_birth。 -alter table pet add owner_birth year after `owner`; --- 5、 将名称为Claws的猫的主人改为kevin -update pet set `owner`='kevin' where `name`='claws'; --- 6、 将没有死的狗的主人改为duck -update pet set `owner`='duck' where death is null and species='dog'; --- 7、 查询没有主人的宠物的名字; -select `name` from pet where owner is null; --- 8、 查询已经死了的cat的姓名,主人,以及去世时间; -select `name`,`owner`,death from pet where species='cat' and death is not null; --- 9、 删除已经死亡的狗 -delete from pet where species='dog' and death is not null; --- 10、查询所有宠物信息 -select * from pet; - -## 第3题 -## 第3题 - -1、创建数据库:test03_company - -```sql -create database test03_company charset utf8; -``` - -2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - -A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - -```mysql -use test03_company ; -create table department( - depid int primary key auto_increment, - depname char(10) not null unique key, - deinfo varchar(200) -) -``` - -B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - -* ​ 雇员编号为主键; -* ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); -* ​ 性别默认为男; - -```mysql -create table employee ( - empid int primary key auto_increment, - name varchar(10) not null, - sex enum('男','女') not null default '男', - title varchar(10), - birthday date, - depid int foreign key references department(depid) -) -``` - -C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - -3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) - -4、添加数据如下: - -部门表: - -| 部门编号 | 部门名称 | 部门简介 | -| -------- | -------- | ------------ | -| 111 | 生产部 | Null | -| 222 | 销售部 | Null | -| 333 | 人事部 | 人力资源管理 | - - 雇员表: - -| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | -| -------- | ---- | ---- | ---------- | ---------- | ------------ | -| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | -| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | -| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | -| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | - - 工资表: - -| 雇员编号 | 基本工资 | 职务工资 | 扣除 | -| -------- | -------- | -------- | ---- | -| 1001 | 2200 | 1100 | 200 | -| 1002 | 1200 | 200 | NULL | -| 1003 | 2900 | 700 | 200 | -| 1004 | 1950 | 700 | 150 | - -```` - - - diff --git "a/41 \345\221\250\344\272\232\350\276\211/20230224 mysql\346\237\245\350\257\242\357\274\214\350\277\220\347\256\227\347\254\246.md.txt" "b/41 \345\221\250\344\272\232\350\276\211/20230224 mysql\346\237\245\350\257\242\357\274\214\350\277\220\347\256\227\347\254\246.md.txt" deleted file mode 100644 index 70416799bcf1570bb5527799a79eb1609c9dd6ca..0000000000000000000000000000000000000000 --- "a/41 \345\221\250\344\272\232\350\276\211/20230224 mysql\346\237\245\350\257\242\357\274\214\350\277\220\347\256\227\347\254\246.md.txt" +++ /dev/null @@ -1,123 +0,0 @@ -## MYSQL - -````MYSQL -#第一题员工表 -create database test charset utf8; -drop table if exists `employee`; -#创建employee表 -use test; -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); -#添加信息 -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','女',NULL,'广东广州',14050.16); --- **要求1:**查询出薪资在12000~13000之间的员工信息。 -select * from employee where salary between 12000 and 13000; --- **要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 -select id,`name`,addr from employee where `name` like '刘%'; --- **要求3:**将“李四”的家庭住址改为“广东韶关” -update employee set addr='广东韶关' where `name`= '李四'; -select * from employee; --- **要求4:**查询出名字中带“小”的员工 -select * from employee where name like '%小%'; --- **要求5:**查询出薪资高于11000的男员工信息 -select * from employee where salary > 11000 and sex = '男'; --- **要求6:**查询没有登记电话号码的员工 -select * from employee where tel is null; --- **要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 -select * from employee where sex='男' and salary > 12000 or addr = '广东深圳' or addr = '广东广州'; --- **要求8:**查询每个员工的年薪,显示“姓名、年薪” -select name 姓名, salary*12 年薪 from employee; -``` - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -#表数据样例: -use test; -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); - --- **要求1:** 查询大国 的国家名称、人口和面积。 --- --- 如果一个国家满足下述两个条件之一,则认为该国是 大国 : --- --- - 面积至少为 300万平方公里(即,3000000 km2) --- --- - 人口至少为 2500 万(即 25000000) -select `name`,population,area from countries_info where area>3000000 or population>25000000; --- **要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 -select * from countries_info where continent='asia'; --- **要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 -select * from countries_info where area<10000 and population<100000; --- **要求4:**查询国家名字中包含“o“字母的国家信息 -select * from countries_info where `name` like '%o%'; --- **要求5:**查询GDP值超过10000000000的国家信息 -select * from countries_info where gdp>10000000000; --- **要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” -select `name` 国家名,population 人口,gdp GDP值,gdp/population 人均贡献GDP值 from countries_info; --- **要求7:**查询人均贡献GDP值低于1000的国家信息。 -select * from countries_info where gdp/population<1000; --- **要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” -select `name` 国家名, area 面积,population 人口,area/population 人均国土面积 from countries_info; -```` - - - diff --git "a/41 \345\221\250\344\272\232\350\276\211/20230309 mysql\345\255\220\347\250\213\345\272\217.md.md" "b/41 \345\221\250\344\272\232\350\276\211/20230309 mysql\345\255\220\347\250\213\345\272\217.md.md" deleted file mode 100644 index 89beeb4b4e619d75fe1b40bba4a5445beeee61a5..0000000000000000000000000000000000000000 --- "a/41 \345\221\250\344\272\232\350\276\211/20230309 mysql\345\255\220\347\250\213\345\272\217.md.md" +++ /dev/null @@ -1,130 +0,0 @@ -## mysql - -### 作业 - -``` mysql -create database lianxi charset utf8; -use lianxi; -create table stuinfo( -stuno char(10), -stuname varchar(10), -stusex char(6), -stuage int, -stuaddress varchar(10), -stuseat int -); -insert into stuinfo values -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'美国硅谷',2), -('s2503','马文才','男',18,'美国硅谷',3), -('s2504','欧阳俊雄','女',21,'美国硅谷',4), -('s2505','梅超风','男',16,'美国硅谷',5), -('s2506','陈旋风','男',19,'美国硅谷',6); -create table stuexam( -examno int, -stuno char(10), -wittenexam int, -labexam int -); -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); -create table stumarke( -examno int, -stuid char(10), -score int -); -insert into stumarke values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); --- 1.查询出年龄比班上平均年龄大的学生的信息 -SELECT - * -FROM - stuinfo -WHERE - stuage > ( SELECT avg( stuage ) FROM stuinfo ); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -SELECT - a.stuno,stuname,stusex,max(score) -FROM - stuinfo a - LEFT JOIN stumarke b ON a.stuno = b.stuid GROUP BY a.stuno; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -SELECT - a.stuno,stuname,stusex,round ((wittenexam+labexam)/2) -FROM - stuinfo a - LEFT JOIN stuexam b on a.stuseat = b.examno; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) --- 普通查询 -SELECT - * -FROM - stuinfo -WHERE - stusex = '男' - AND stuage >= 20; --- 子查询 -SELECT - * -FROM - stuinfo -WHERE - stuno = ( SELECT stuno FROM stuinfo WHERE stusex = '男' AND stuage >= 20); --- 5.查询出年龄比所有男生年龄都大的女生的信息 - -SELECT - * -FROM - stuinfo -WHERE - stusex = '女' - AND stuage > ( SELECT max( stuage ) FROM stuinfo WHERE stusex = '男' ); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -SELECT - a.*, - min( score ) fen -FROM - stuinfo a - LEFT JOIN stumarke b ON a.stuno = b.stuid -GROUP BY - a.stuno -HAVING - fen > 60; --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) --- 表连接 -SELECT - b.* -FROM - stumarke a - LEFT JOIN stuinfo b ON a.stuid = b.stuno -GROUP BY - a.stuid; --- in方法 -select * from stuinfo where stuno in (select stuid from stumarke group by stuid); - --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) --- --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) --- --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) --- --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) --- --- 13.查询班上比所有男生年龄都要大的女生的信息 --- --- 14.查询出只要比某个男生年龄大的女生的信息 --- -``` - diff --git "a/44 \344\273\243\347\221\236/MySQL\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232DQl.md" "b/44 \344\273\243\347\221\236/MySQL\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232DQl.md" deleted file mode 100644 index cfebab3ab104404c37b3062ebc17a63f1c32f9ff..0000000000000000000000000000000000000000 --- "a/44 \344\273\243\347\221\236/MySQL\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232DQl.md" +++ /dev/null @@ -1,96 +0,0 @@ -## 第一题 - - - -create database if not exists ai charset utf8; -use ai; -drop table if exists `employee`; -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -select *from employee where salary between 1200 and 1300; -select id,name,addr from employee where name like '刘%'; -update employee set addr='广东韶关' where name='李四'; -select *from employee where name like '%小%'; -select*from employee where salary>11000 and sex='男'; -select*from employee where tel is null; -select *from employee where salary>12000 && sex='男'; -select name 名字,salary 薪 from employee; - -## 第二题 - -create database if not exists ni charset utf8; -use ni; -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); --- **要求1:** 查询大国 的国家名称、人口和面积。 -select name,continent,area,population from countries_info where area>=3000000 or population>=25000000; - --- 如果一个国家满足下述两个条件之一,则认为该国是 大国 : --- - --- - 面积至少为 300万平方公里(即,3000000 km2) -select *from countries_info where area>=3000000; --- - 人口至少为 2500 万(即 25000000) -select *from countries_info where population >=25000000; --- **要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 -select * from countries_info where continent= 'Asia'; --- **要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - select * from countries_info where area<10000 and population<100000; --- **要求4:**查询国家名字中包含“o“字母的国家信息 -select * from countries_info where name like '%o%'; --- **要求5:**查询GDP值超过10000000000的国家信息 -select * from countries_info where gdp>10000000000; - --- **要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” --- - -select name '国家名', population '人口', gdp 'GDP值',gdp/ population '人均贡献GDP值' from countries_info; - --- **要求7:**查询人均贡献GDP值低于1000的国家信息。 --- - -select * from countries_info where gdp / population < 1000; - --- **要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -select name '国家名',area '面积', population '人口',area/ population '人均国土面积值' from countries_info; - -## 笔记 - -查询内容:select*from 表名 - -select 字段列表 from 表名 where 条件; - -别名:select 字段名1 as ‘ 别名1’,字段名2 as ‘别名2’from表名称 as 别名 - -去重:select distinct 字段列表from 表名 where; - -select distinct did from t_employee; - -查某个带。。。。:select * from countries_info where name like '%o%'; - -%:表示任意个数 —:一个下划线表示一个 用 like \ No newline at end of file diff --git "a/44 \344\273\243\347\221\236/\344\275\234\344\270\232.md" "b/44 \344\273\243\347\221\236/\344\275\234\344\270\232.md" deleted file mode 100644 index 64c333aaab31631d67b5b1c912f1689421aaac80..0000000000000000000000000000000000000000 --- "a/44 \344\273\243\347\221\236/\344\275\234\344\270\232.md" +++ /dev/null @@ -1,95 +0,0 @@ -## 第一题 - -#1、创建数据库test01_market -create database if not EXISTS test01_market; -#2、创建表格customers -use test01_market; -create table customers( -c_num int(11), -c_name varchar(50), -c_contact varchar(50), -c_city varchar(50), -c_birth date -); -/*| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date |*/ - -#**要求3:**将c_contact字段移动到c_birth字段后面 -alter table customers modify c_contact varchar(50) after c_birth; -#**要求4:**将c_name字段数据类型改为 varchar(70) -alter table customers modify c_name varchar(70); -#**要求5:**将c_contact字段改名为c_phone -alter table customers change c_contact c_phone varchar(50); - -要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -alter table customers add c_gender char(1); -**要求7:**将表名改为customers_info -alter table customers rename to customers_info; - -要求8:**删除字段c_city - -alter table customers_info drop c_city; - -## 第二题 - -## 第2题 - -#1、创建数据库test02_library -create database if not exists test02_library; -#2、创建表格books -use test02_library; -create table books( -b_id int(11), -b_name varchar(50), -author varchar(100), -price float, -pubdate year, -note varchar(100), -num int(11) -); -/*| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------- | -------- | ------------- | -------- | ---- | -| b_id | 书编号 | int(11) | 否 | 是 | -| b_name | 书名 | varchar(50) | 否 | 否 | -| authors | 作者 | varchar(100) | 否 | 否 | -| price | 价格 | float | 否 | 否 | -| pubdate | 出版日期 | year | 否 | 否 | -| note | 说明 | varchar(100) | 是 | 否 | -| num | 库存 | int(11) | 否 | 否 |*/ - -#3、向books表中插入记录 - -#1) 指定所有字段名称插入第一条记录 -insert into books(b_id,b_name,author,price,pubdate,note,num) values(1,'Tal of AAA','Dickes',23,1955,'novel',11); -#2)不指定字段名称插入第二记录 -insert into books(b_id,b_name,author,price,pubdate,note,num) values(2,'EmmaT','Jane lura',35,1993,'joke',22); -#3)同时插入多条记录(剩下的所有记录) -insert into books(b_id,b_name,author,price,pubdate,note,num) values(3,'Story of Jane','Jane Tim ',40,2001,'novel',0), -(4,'Lovey Day','George Byron',40,2005,'novel',30), -(5,'Old land','Honore Blade',30,2010,'law',0), -(6,'The Battle','Upton Sara',30,1999,'medicine',40), -(7,'Rose Hood','Richard haggard',28,2008,'cartoon',28); - -/*| b_id | b_name | authors | price | pubdate | note | num | -| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 |*/ - -#、将小说类型(novel)的书的价格都增加5。 -update books set price=+5 -desc books; -#5、将名称为EmmaT的书的价格改为40。 -update books set price=40 where b_id=2; -#6、删除库存为0的记录 -delete from books where num=0; \ No newline at end of file diff --git "a/44 \344\273\243\347\221\236/\345\255\220\346\237\245\350\257\242.md" "b/44 \344\273\243\347\221\236/\345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index 33bf6bd388e1b4a2a4380272be585ead4f4d5a79..0000000000000000000000000000000000000000 --- "a/44 \344\273\243\347\221\236/\345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,70 +0,0 @@ -| CREATE DATABASE queryl charset utf8; | | | -| ------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| | [5](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_5) | use queryl; | -| | [6](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_6) | CREATE table stuinfo( | -| | [7](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_7) | stuNO varchar(10), | -| | [8](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_8) | stuName varchar(10), | -| | [9](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_9) | stuSex varchar(10), | -| | [10](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_10) | stuAge double, | -| | [11](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_11) | stuAddress varchar(10), | -| | [12](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_12) | stuSeat int | -| | [13](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_13) | ); | -| | [14](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_14) | insert into stuinfo (stuno,stuname,stusex,stuage,stuaddress,stuseat) values | -| | [15](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_15) | ('s2501','张秋利','男','20','美国硅谷',1),('s2502','李斯文','女','18','湖北武汉',2), | -| | [16](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_16) | ('s2503','马文才','男','18','湖南长沙',3),('s2504','欧阳俊雄','女','21','湖北武汉',4), | -| | [17](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_17) | ('s2505','梅超风','男','16','湖北武汉',5),('s2506','陈旋风','男','19','美国硅谷',6); | -| | [18](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_18) | create table stuExam( | -| | [19](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_19) | examNO int, | -| | [20](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_20) | stuNO varchar(10), | -| | [21](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_21) | writtenExam varchar(100), | -| | [22](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_22) | labExam varchar(100) | -| | [23](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_23) | ); | -| | [24](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_24) | insert into stuExam (examNO,stuNO,writtenExam,labexam) values | -| | [25](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_25) | (1,'s2501','50','70'),(2,'s2502','60','70'), | -| | [26](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_26) | (3,'s2503','86','70'),(4,'s2504','40','80'), | -| | [27](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_27) | (5,'s2505','70','85'),(6,'s2506','85','90'); | -| | [28](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_28) | create table stuMarks( | -| | [29](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_29) | examNo int, | -| | [30](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_30) | stulD varchar(10), | -| | [31](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_31) | score varchar(100) | -| | [32](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_32) | ); | -| | [33](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_33) | insert into stuMarks (examno,stuld,score) VALUES | -| | [34](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_34) | (1,'s2501','88'),(2,'s2501','92'),(3,'2501','53'), | -| | [35](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_35) | (4,'s2502','60'),(5,'s2502','99'),(6,'s2503','82'); | -| | [36](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_36) | -- 在如图的数据表上完成以下题目 | -| | [37](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_37) | -- | -| | [38](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_38) | select * from stuinfo; | -| | [39](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_39) | -- 1.查询出年龄比班上平均年龄大的学生的信息 | -| | [40](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_40) | select * from stuinfo where stuage>(select avg(stuage) from stuinfo); | -| | [41](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_41) | -- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) | -| | [42](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_42) | | -| | [43](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_43) | SELECT a.stuno,stuname,stusex,max( score ) FROM stuinfo a left JOIN stumarks b ON a.stuno = b.stuid; | -| | [44](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_44) | -- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) | -| | [45](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_45) | -- | -| | [46](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_46) | select a.stuno,stuname,stusex,((writtenExam+labExam)/2) 考试平均分 from stuinfo a left join stuexam b on a.stuno = b.stuno; | -| | [47](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_47) | -- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) | -| | [48](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_48) | select * from stuinfo where stusex = '男' and stuage >= 20; | -| | [49](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_49) | select * from stuinfo where stusex = '男' and stuAge in (select stuage from stuinfo where stuage>=20); | -| | [50](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_50) | -- 5.查询出年龄比所有男生年龄都大的女生的信息 | -| | [51](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_51) | select * from stuinfo where stuage>(select stuAge from stuinfo where stuSex='男' LIMIT 1)&& stuSex='女'; | -| | [52](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_52) | -- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) | -| | [53](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_53) | select * from stumarks a right join stuinfo b on a.stuid=b.stuNO where a.stuid not in (select stuid from stumarks where score<60) GROUP BY stuName; | -| | [54](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_54) | | -| | [55](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_55) | -- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) | -| | [56](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_56) | select a.* from stuinfo a left join stuexam b on a.stuNO=b.stuNO; | -| | [57](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_57) | select * from stuinfo where stuNO in (SELECT stuno from stuexam); | -| | [58](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_58) | -- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) | -| | [59](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_59) | SELECT distinct i.* from stuinfo i LEFT JOIN stumarks m on i.stuNO = m.stuID where m.stuID is null; | -| | [60](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_60) | SELECT * from stuinfo where stuNO not in(SELECT distinct stuID from stumarks); | -| | [61](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_61) | -- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) | -| | [62](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_62) | SELECT i.* from stuinfo i LEFT JOIN stumarks m on i.stuNO=m.stuID where score>90; | -| | [63](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_63) | -- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) | -| | [64](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_64) | SELECT i.*,avg(score) as 平均分 from stumarks m LEFT JOIN stuinfo i on i.stuNO=m.stuID GROUP BY stuID HAVING 平均分>80 ; | -| | [65](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_65) | -- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) | -| | [66](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_66) | SELECT i.* from stuinfo i LEFT JOIN stumarks m on i.stuNO = m.stuID where score>(SELECT max(score) from stumarks m RIGHT JOIN stuinfo i on i.stuNO=m.stuid where i.stuName='张秋利'); | -| | [67](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_67) | -- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) | -| | [68](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_68) | SELECT i.* from stuinfo i LEFT JOIN stumarks m on i.stuNO = m.stuID where score >(SELECT score from stumarks m RIGHT JOIN stuinfo i on i.stuNO=m.stuid where i.stuName='张秋利' ORDER BY score asc LIMIT 1) && i.stuName!='张秋利' GROUP BY m.stuID; | -| | [69](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_69) | -- 13.查询班上比所有男生年龄都要大的女生的信息 | -| | [70](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_70) | SELECT * from stuinfo where stuAge>(SELECT stuAge from stuinfo where stuSex='男' LIMIT 1); | -| | [71](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_71) | -- 14.查询出只要比某个男生年龄大的女生的信息 | -| | [72](https://gitee.com/que-su-wen/mysql-base/commit/ba6102126011c91f16af067b4d84ce8f38acddf4#46028f8c57037f9674cbd72832802f77239347e0_0_72) | SELECT * from stuinfo where stuSex='女' && stuAge>(SELECT min(stuAge) FROM stuinfo where stuSex='男'); | \ No newline at end of file diff --git "a/44 \344\273\243\347\221\236/\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.md" "b/44 \344\273\243\347\221\236/\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index 5b6b74bb5d53bfdb6104b7c0c28301b65da1a8f6..0000000000000000000000000000000000000000 --- "a/44 \344\273\243\347\221\236/\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,355 +0,0 @@ -| 作业 | | | -| ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| | [2](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_2) | | -| | [3](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_3) | ### 作业1 | -| | [4](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_4) | | -| | [5](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_5) | ``` mysql | -| | [6](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_6) | -- ## 第1题 | -| | [7](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_7) | -- | -| | [8](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_8) | -- 1、创建数据库test01_company | -| | [9](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_9) | create database test01_company charset utf8; | -| | [10](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_10) | -- | -| | [11](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_11) | -- 2、创建表格offices | -| | [12](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_12) | use test01_company; | -| | [13](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_13) | create table offices( | -| | [14](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_14) | officecode int, | -| | [15](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_15) | city varchar(30), | -| | [16](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_16) | address varchar(50), | -| | [17](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_17) | country varchar(50), | -| | [18](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_18) | postalcode varchar(25) | -| | [19](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_19) | ); | -| | [20](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_20) | -- | -| | [21](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_21) | -- \| 字段名 \| 数据类型 \| | -| | [22](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_22) | -- \| ---------- \| ----------- \| | -| | [23](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_23) | -- \| officeCode \| int \| | -| | [24](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_24) | -- \| city \| varchar(30) \| | -| | [25](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_25) | -- \| address \| varchar(50) \| | -| | [26](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_26) | -- \| country \| varchar(50) \| | -| | [27](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_27) | -- \| postalCode \| varchar(25) \| | -| | [28](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_28) | -- | -| | [29](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_29) | -- 3、创建表格employees | -| | [30](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_30) | create table employees( | -| | [31](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_31) | empnum int, | -| | [32](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_32) | lastname varchar(50), | -| | [33](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_33) | firstname varchar(50), | -| | [34](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_34) | mobile varchar(25), | -| | [35](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_35) | code int, | -| | [36](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_36) | jobtitle varchar(50), | -| | [37](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_37) | birth date, | -| | [38](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_38) | note varchar(255), | -| | [39](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_39) | sex varchar(5) | -| | [40](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_40) | ); | -| | [41](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_41) | -- | -| | [42](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_42) | -- \| 字段名 \| 数据类型 \| | -| | [43](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_43) | -- \| --------- \| ------------- \| | -| | [44](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_44) | -- \| empNum \| int(11) \| | -| | [45](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_45) | -- \| lastName \| varchar(50) \| | -| | [46](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_46) | -- \| firstName \| varchar(50) \| | -| | [47](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_47) | -- \| mobile \| varchar(25) \| | -| | [48](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_48) | -- \| code \| int \| | -| | [49](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_49) | -- \| jobTitle \| varchar(50) \| | -| | [50](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_50) | -- \| birth \| date \| | -| | [51](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_51) | -- \| Note \| varchar(255) \| | -| | [52](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_52) | -- \| Sex \| varchar(5) \| | -| | [53](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_53) | -- | -| | [54](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_54) | -- **要求4:**将表employees的mobile字段修改到code字段后面。 | -| | [55](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_55) | desc employees; | -| | [56](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_56) | alter table employees modify mobile varchar(25) after code; | -| | [57](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_57) | -- | -| | [58](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_58) | -- **要求5:**将表employees的birth字段改名为birthday; | -| | [59](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_59) | alter table employees change birth birthday date; | -| | [60](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_60) | -- | -| | [61](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_61) | -- **要求6:**修改sex字段,数据类型为char(1)。 | -| | [62](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_62) | alter table employees modify sex char(1); | -| | [63](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_63) | -- | -| | [64](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_64) | -- **要求7:**删除字段note; | -| | [65](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_65) | alter table employees drop column note; | -| | [66](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_66) | -- | -| | [67](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_67) | -- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); | -| | [68](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_68) | alter table employees add favoriate_activity varchar(100); | -| | [69](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_69) | -- | -| | [70](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_70) | -- **要求9:**将表employees的名称修改为 employees_info | -| | [71](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_71) | alter table employees rename to employees_info; | -| | [72](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_72) | -- | -| | [73](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_73) | -- ```mysql | -| | [74](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_74) | -- | -| | [75](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_75) | -- ``` | -| | [76](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_76) | -- | -| | [77](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_77) | ``` | -| | [78](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_78) | | -| | [79](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_79) | ### 作业2 | -| | [80](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_80) | | -| | [81](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_81) | ``` mysql | -| | [82](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_82) | -- ## 第2题 | -| | [83](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_83) | -- | -| | [84](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_84) | -- 1、创建数据库test02db | -| | [85](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_85) | create database test01db charset utf8; | -| | [86](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_86) | -- | -| | [87](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_87) | -- 2、创建表格pet | -| | [88](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_88) | use test01db; | -| | [89](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_89) | create table pet( | -| | [90](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_90) | name varchar(20), | -| | [91](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_91) | owner varchar(20), | -| | [92](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_92) | species varchar(20), | -| | [93](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_93) | sex char(1), | -| | [94](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_94) | birth year, | -| | [95](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_95) | death year | -| | [96](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_96) | ); | -| | [97](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_97) | -- | -| | [98](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_98) | -- \| 字段名 \| 字段说明 \| 数据类型 \| | -| | [99](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_99) | -- \| ------- \| -------- \| ----------- \| | -| | [100](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_100) | -- \| name \| 宠物名称 \| varchar(20) \| | -| | [101](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_101) | -- \| owner \| 宠物主人 \| varchar(20) \| | -| | [102](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_102) | -- \| species \| 种类 \| varchar(20) \| | -| | [103](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_103) | -- \| sex \| 性别 \| char(1) \| | -| | [104](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_104) | -- \| birth \| 出生日期 \| year \| | -| | [105](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_105) | -- \| death \| 死亡日期 \| year \| | -| | [106](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_106) | -- | -| | [107](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_107) | -- 3、添加记录 | -| | [108](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_108) | insert into pet values ('fluffy','harold','cat','f','2003','2010'),('claws','gwen','cat','m','2004',null),('buffy',null,'dog','f','2009',null),('fang','benny','dog','m','2000',null),('bowser','diane','dog','m','2003','2009'),('chirpy',null,'bird','f','2008',null); | -| | [109](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_109) | -- | -| | [110](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_110) | -- \| name \| owner \| species \| sex \| birth \| death \| | -| | [111](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_111) | -- \| ------ \| ------ \| ------- \| ---- \| ----- \| ----- \| | -| | [112](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_112) | -- \| Fluffy \| harold \| Cat \| f \| 2003 \| 2010 \| | -| | [113](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_113) | -- \| Claws \| gwen \| Cat \| m \| 2004 \| \| | -| | [114](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_114) | -- \| Buffy \| \| Dog \| f \| 2009 \| \| | -| | [115](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_115) | -- \| Fang \| benny \| Dog \| m \| 2000 \| \| | -| | [116](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_116) | -- \| bowser \| diane \| Dog \| m \| 2003 \| 2009 \| | -| | [117](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_117) | -- \| Chirpy \| \| Bird \| f \| 2008 \| \| | -| | [118](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_118) | -- | -| | [119](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_119) | -- 4、 添加字段主人的生日owner_birth。 | -| | [120](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_120) | alter table pet add owner_birth year after owner; | -| | [121](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_121) | -- | -| | [122](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_122) | -- 5、 将名称为Claws的猫的主人改为kevin | -| | [123](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_123) | update pet set owner = kevin where name = 'claws'; | -| | [124](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_124) | -- | -| | [125](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_125) | -- 6、 将没有死的狗的主人改为duck | -| | [126](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_126) | update pet set owner = duck where death = null; | -| | [127](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_127) | -- | -| | [128](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_128) | -- 7、 查询没有主人的宠物的名字; | -| | [129](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_129) | -- | -| | [130](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_130) | -- 8、 查询已经死了的cat的姓名,主人,以及去世时间; | -| | [131](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_131) | -- | -| | [132](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_132) | -- 9、 删除已经死亡的狗 | -| | [133](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_133) | delete from pet where death = not null; | -| | [134](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_134) | -- | -| | [135](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_135) | -- 10、查询所有宠物信息 | -| | [136](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_136) | select * from pet; | -| | [137](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_137) | ``` | -| | [138](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_138) | | -| | [139](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_139) | ### 作业3 | -| | [140](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_140) | | -| | [141](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_141) | ``` mysql | -| | [142](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_142) | -- ## 第3题 | -| | [143](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_143) | -- | -| | [144](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_144) | -- 1、创建数据库:test03_company | -| | [145](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_145) | -- | -| | [146](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_146) | -- ```sql | -| | [147](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_147) | create database test03_company charset utf8; | -| | [148](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_148) | -- ``` | -| | [149](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_149) | -- | -| | [150](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_150) | -- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 | -| | [151](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_151) | -- | -| | [152](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_152) | -- A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 | -| | [153](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_153) | -- | -| | [154](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_154) | -- ```mysql | -| | [155](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_155) | use test03_company ; | -| | [156](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_156) | create table department( | -| | [157](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_157) | depid int primary key auto_increment, | -| | [158](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_158) | depname char(10) not null unique key, | -| | [159](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_159) | deinfo varchar(200) | -| | [160](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_160) | ); | -| | [161](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_161) | -- ``` | -| | [162](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_162) | -- | -| | [163](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_163) | -- B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 | -| | [164](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_164) | -- | -| | [165](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_165) | -- * 雇员编号为主键; | -| | [166](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_166) | -- * 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); | -| | [167](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_167) | -- * 性别默认为男; | -| | [168](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_168) | -- | -| | [169](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_169) | -- ```mysql | -| | [170](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_170) | create table employee ( | -| | [171](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_171) | empid int primary key auto_increment, | -| | [172](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_172) | name varchar(10) not null, | -| | [173](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_173) | sex enum('男','女') not null default '男', | -| | [174](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_174) | title varchar(10), | -| | [175](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_175) | birthday date, | -| | [176](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_176) | depid int foreign key references department(depid) | -| | [177](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_177) | ); | -| | [178](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_178) | -- ``` | -| | [179](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_179) | -- | -| | [180](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_180) | -- C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 | -| | [181](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_181) | -- | -| | [182](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_182) | -- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) | -| | [183](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_183) | create table salary( | -| | [184](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_184) | empid int foreign key (empid) references employee(empid) on update cascade on delete cascade, | -| | [185](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_185) | basesalary double(6,2) not null, | -| | [186](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_186) | titlesalary double(6,2) not null, | -| | [187](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_187) | deduction double(6,2) | -| | [188](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_188) | ); | -| | [189](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_189) | -- | -| | [190](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_190) | -- 4、添加数据如下: | -| | [191](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_191) | -- | -| | [192](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_192) | -- 部门表: | -| | [193](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_193) | -- | -| | [194](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_194) | -- \| 部门编号 \| 部门名称 \| 部门简介 \| | -| | [195](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_195) | -- \| -------- \| -------- \| ------------ \| | -| | [196](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_196) | -- \| 111 \| 生产部 \| Null \| | -| | [197](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_197) | -- \| 222 \| 销售部 \| Null \| | -| | [198](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_198) | -- \| 333 \| 人事部 \| 人力资源管理 \| | -| | [199](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_199) | | -| | [200](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_200) | insert into department values (111,'生产部',null),(222,'销售部',null),(333,'人事部','人力资源管理'); | -| | [201](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_201) | -- | -| | [202](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_202) | -- 雇员表: | -| | [203](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_203) | -- | -| | [204](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_204) | -- \| 雇员编号 \| 姓名 \| 性别 \| 职称 \| 出生日期 \| 所在部门编号 \| | -| | [205](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_205) | -- \| -------- \| ---- \| ---- \| ---------- \| ---------- \| ------------ \| | -| | [206](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_206) | -- \| 1001 \| 张三 \| 男 \| 高级工程师 \| 1975-1-1 \| 111 \| | -| | [207](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_207) | -- \| 1002 \| 李四 \| 女 \| 助工 \| 1985-1-1 \| 111 \| | -| | [208](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_208) | -- \| 1003 \| 王五 \| 男 \| 工程师 \| 1978-11-11 \| 222 \| | -| | [209](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_209) | -- \| 1004 \| 张六 \| 男 \| 工程师 \| 1999-1-1 \| 222 \| | -| | [210](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_210) | insert into employee values (1001,'张三','男','高级工程师','1975-1-1',111),(1002,'李四','女','助工','1985-1-1',111),(1003,'王五','男','工程师','1978-11-11',222),(1004,'张六','男','工程师','1999-1-1',222); | -| | [211](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_211) | -- | -| | [212](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_212) | -- 工资表: | -| | [213](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_213) | -- | -| | [214](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_214) | -- \| 雇员编号 \| 基本工资 \| 职务工资 \| 扣除 \| | -| | [215](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_215) | -- \| -------- \| -------- \| -------- \| ---- \| | -| | [216](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_216) | -- \| 1001 \| 2200 \| 1100 \| 200 \| | -| | [217](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_217) | -- \| 1002 \| 1200 \| 200 \| NULL \| | -| | [218](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_218) | -- \| 1003 \| 2900 \| 700 \| 200 \| | -| | [219](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_219) | -- \| 1004 \| 1950 \| 700 \| 150 \| | -| | [220](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_220) | insert into salary values (1001,2200,1100,200),(1002,1200,200,null),(1003,2900,700,200),(1004,1950,700,150); | -| | [221](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_221) | -- | -| | [222](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_222) | -- | -| | [223](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_223) | ``` | -| | [224](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_224) | | -| | [225](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_225) | ### 作业4 | -| | [226](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_226) | | -| | [227](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_227) | ``` mysql | -| | [228](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_228) | -- ## 第4题 | -| | [229](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_229) | -- | -| | [230](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_230) | -- 1、创建一个数据库:test04_school | -| | [231](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_231) | create database test04_school charset utf8; | -| | [232](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_232) | -- | -| | [233](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_233) | -- 2、创建如下表格 | -| | [234](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_234) | use test04_school; | -| | [235](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_235) | -- | -| | [236](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_236) | -- 表1 Department表的定义 | -| | [237](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_237) | create table department( | -| | [238](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_238) | depno int(10) not null primary key, | -| | [239](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_239) | depname varchar(20) not null, | -| | [240](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_240) | depnote varchar(50) | -| | [241](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_241) | ); | -| | [242](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_242) | -- | -| | [243](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_243) | -- \| **字段名** \| **字段描述** \| **数据类型** \| **主键** \| **外键** \| **非空** \| **唯一** \| | -| | [244](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_244) | -- \| ---------- \| ------------ \| ------------ \| -------- \| -------- \| -------- \| -------- \| | -| | [245](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_245) | -- \| DepNo \| 部门号 \| int(10) \| 是 \| 否 \| 是 \| 是 \| | -| | [246](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_246) | -- \| DepName \| 部门名称 \| varchar(20) \| 否 \| 否 \| 是 \| 否 \| | -| | [247](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_247) | -- \| DepNote \| 部门备注 \| Varchar(50) \| 否 \| 否 \| 否 \| 否 \| | -| | [248](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_248) | -- | -| | [249](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_249) | -- 表2 Teacher表的定义 | -| | [250](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_250) | create table teacher( | -| | [251](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_251) | number int not null primary key, | -| | [252](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_252) | name varchar(30) not null, | -| | [253](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_253) | sex varchar(4), | -| | [254](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_254) | birth date, | -| | [255](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_255) | depno int foreign key (depno) references department(depno), | -| | [256](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_256) | salary float, | -| | [257](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_257) | address varchar(100) | -| | [258](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_258) | ); | -| | [259](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_259) | -- | -| | [260](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_260) | -- \| **字段名** \| **字段描述** \| **数据类型** \| **主键** \| **外键** \| **非空** \| **唯一** \| | -| | [261](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_261) | -- \| ---------- \| ------------ \| ------------ \| -------- \| -------- \| -------- \| -------- \| | -| | [262](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_262) | -- \| Number \| 教工号 \| int \| 是 \| 否 \| 是 \| 是 \| | -| | [263](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_263) | -- \| Name \| 姓名 \| varchar(30) \| 否 \| 否 \| 是 \| 否 \| | -| | [264](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_264) | -- \| Sex \| 性别 \| varchar(4) \| 否 \| 否 \| 否 \| 否 \| | -| | [265](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_265) | -- \| Birth \| 出生日期 \| date \| 否 \| 否 \| 否 \| 否 \| | -| | [266](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_266) | -- \| DepNo \| 部门号 \| int \| 否 \| 是 \| 否 \| 否 \| | -| | [267](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_267) | -- \| Salary \| 工资 \| float \| 否 \| 否 \| 否 \| 否 \| | -| | [268](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_268) | -- \| Address \| 家庭住址 \| varchar(100) \| 否 \| 否 \| 否 \| 否 \| | -| | [269](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_269) | -- | -| | [270](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_270) | -- 3、添加记录 | -| | [271](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_271) | insert into department values (601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'),(603,'艺术设计系','广告艺术设计等专业'),(604,'管理工程系','连锁经营管理等专业'); | -| | [272](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_272) | -- | -| | [273](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_273) | -- \| **DepNo** \| **DepName** \| **DepNote** \| | -| | [274](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_274) | -- \| --------- \| ----------- \| ------------------ \| | -| | [275](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_275) | -- \| 601 \| 软件技术系 \| 软件技术等专业 \| | -| | [276](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_276) | -- \| 602 \| 网络技术系 \| 多媒体技术等专业 \| | -| | [277](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_277) | -- \| 603 \| 艺术设计系 \| 广告艺术设计等专业 \| | -| | [278](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_278) | -- \| 604 \| 管理工程系 \| 连锁经营管理等专业 \| | -| | [279](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_279) | | -| | [280](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_280) | insert into teacher values (2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'),(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'),(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'),(2004,'James','女','1980-10-20',602,3500,'四川省成都市'),(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); | -| | [281](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_281) | -- | -| | [282](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_282) | -- \| **Number** \| **Name** \| **Sex** \| **Birth** \| **DepNo** \| **Salary** \| **Address** \| | -| | [283](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_283) | -- \| ---------- \| -------- \| ------- \| ---------- \| --------- \| ---------- \| ------------ \| | -| | [284](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_284) | -- \| 2001 \| Tom \| 女 \| 1970-01-10 \| 602 \| 4500 \| 四川省绵阳市 \| | -| | [285](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_285) | -- \| 2002 \| Lucy \| 男 \| 1983-12-18 \| 601 \| 2500 \| 北京市昌平区 \| | -| | [286](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_286) | -- \| 2003 \| Mike \| 男 \| 1990-06-01 \| 604 \| 1500 \| 重庆市渝中区 \| | -| | [287](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_287) | -- \| 2004 \| James \| 女 \| 1980-10-20 \| 602 \| 3500 \| 四川省成都市 \| | -| | [288](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_288) | -- \| 2005 \| Jack \| 男 \| 1975-05-30 \| 603 \| 1200 \| 重庆市南岸区 \| | -| | [289](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_289) | -- | -| | [290](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_290) | -- 4、用SELECT语句查询Teacher表的所有记录。 | -| | [291](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_291) | select * from teacher; | -| | [292](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#79e8e2ce617a1798a4bb54bff8cffceb5a1f58bd_0_292) | | -| | | | -| | | | -| | | | - - ## 笔记 - - - -| | [1](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_1) | # 约束 | -| ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| | [2](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_2) | | -| | [3](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_3) | (数据类型就是一种对数据的约束) | -| | [4](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_4) | | -| | [5](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_5) | #### 1.非空约束 | -| | [6](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_6) | | -| | [7](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_7) | not null (表示这个字段必须填写) | -| | [8](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_8) | | -| | [9](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_9) | #### 2.默认约束 | -| | [10](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_10) | | -| | [11](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_11) | default (当你不给值时,系统自动以默认值增充) #非空+默认值约束 | -| | [12](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_12) | | -| | [13](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_13) | #### 3.主键约束 | -| | [14](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_14) | | -| | [15](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_15) | primary key (非空,唯一 就是值不能重复,同一个表中只能有一个主键) | -| | [16](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_16) | | -| | [17](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_17) | #### 4.唯一约束 | -| | [18](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_18) | | -| | [19](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_19) | unique key (值不能重复,可以为空,一个表中可以有多个字段可设唯一) | -| | [20](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_20) | | -| | [21](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_21) | #### 5.自增约束 | -| | [22](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_22) | | -| | [23](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_23) | auto_increment #前提是主键 | -| | [24](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_24) | | -| | [25](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_25) | (不给值,给0或者给null值,会自动在原来最大数基础上+1,给了值,就以给的值为准。) | -| | [26](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_26) | | -| | [27](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_27) | #### 6.外键约束 | -| | [28](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_28) | | -| | [29](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_29) | foreign key (约束两个表的关系,或者是一个表的两个字段之间的关系) | -| | [30](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_30) | | -| | [31](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_31) | 格式: foreign key (从表的字段) references 主表(被依赖字段); | -| | [32](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_32) | | -| | [33](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_33) | 1.主表(父表)和从表(子表) # 主表:被依赖,被参考。 从表:依赖别人的,参考别人的。 | -| | [34](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_34) | | -| | [35](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_35) | 2.外键的建立和指定要在从表中定义 | -| | [36](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_36) | | -| | [37](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_37) | ##### 要求 | -| | [38](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_38) | | -| | [39](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_39) | A.主表必须先存在。 | -| | [40](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_40) | | -| | [41](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_41) | B.主表被依赖字段必须有索引,所以通常是主键列或唯一键列才能作为被依赖字段。 | -| | [42](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_42) | | -| | [43](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_43) | C.删除表时,要么先删除从表,在删除主表。要么先解除外键约束,才能删除。 | -| | [44](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_44) | | -| | [45](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_45) | D.从表的依赖字段的数据,必须在主表被依赖字段中选择,添加与修改都是这样。 | -| | [46](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_46) | | -| | [47](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_47) | E.主表被依赖字段的数据不能轻易的删除和修改,要看是否被引用。 | -| | [48](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_48) | | -| | [49](https://gitee.com/huang-liutao/mysql-base/commit/7a0887c3f8faf4e202f9f8304e1bc1eb7153aa75#515d5aaefbe568fa4ec9f9f40014c2d1f1c096a7_0_49) | #外键的约束等级为 on update/delete cascade/(set null) | -| | | | - - - diff --git "a/44 \344\273\243\347\221\236/\350\201\232\345\220\210\345\207\275\346\225\260.md" "b/44 \344\273\243\347\221\236/\350\201\232\345\220\210\345\207\275\346\225\260.md" deleted file mode 100644 index edcd90bc375efb6567649979cf9fb45c4bbf3447..0000000000000000000000000000000000000000 --- "a/44 \344\273\243\347\221\236/\350\201\232\345\220\210\345\207\275\346\225\260.md" +++ /dev/null @@ -1,172 +0,0 @@ -| Avg()平均值 Sum()求和 Max()最大值 | | | -| --------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| | [4](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_4) | | -| | [5](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_5) | Min()最小值 count()统计记录器 | -| | [6](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_6) | | -| | [7](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_7) | count(**)统计全部,count**(字段)统计非null的值 | -| | [8](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_8) | | -| | [9](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_9) | 关联查询 | -| | [10](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_10) | | -| | [11](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_11) | 内连接:a inner join b on a.字段=b.字段 ab相同数据 | -| | [12](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_12) | | -| | [13](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_13) | 左全连接:a left join b on a.字段=b.字段 where a.字段 is null 不重复的a数据 | -| | [14](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_14) | | -| | [15](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_15) | 右全连接:a right join b on a.字段=b.字段 where b.字段 is null 不重复的b数据 | -| | [16](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_16) | | -| | [17](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_17) | 左连接:a left join b on a.字段=b.字段 全a数据 | -| | [18](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_18) | | -| | [19](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_19) | 右连接:a right join b on a.字段=b.字段 全b数据 | -| | [20](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_20) | | -| | [21](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_21) | | -| | [22](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_22) | | -| | [23](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_23) | # 作业 | -| | [24](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_24) | | -| | [25](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_25) | ```mysql | -| | [26](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_26) | ## 创建添加数据顺序 1,4,2,3 | -| | [27](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_27) | | -| | [28](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_28) | create database glcx charset utf8; | -| | [29](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_29) | use glcx; | -| | [30](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_30) | create table Student( | -| | [31](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_31) | Sno varchar (20) not null primary key, | -| | [32](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_32) | Sname varchar (20) not null, | -| | [33](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_33) | Ssex varchar (20) not null, | -| | [34](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_34) | Sbirthday datetime, | -| | [35](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_35) | Class varchar (20) | -| | [36](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_36) | ); | -| | [37](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_37) | create table Course( | -| | [38](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_38) | Cno varchar (20) not null primary key, | -| | [39](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_39) | Cname varchar (20) not null, | -| | [40](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_40) | Tno varchar (20) not null, | -| | [41](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_41) | foreign key(Tno) references Teacher(Tno) | -| | [42](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_42) | ); | -| | [43](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_43) | create table Score( | -| | [44](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_44) | Sno varchar (20) not null, | -| | [45](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_45) | foreign key(Sno) references Student(Sno), | -| | [46](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_46) | Cno varchar (20), | -| | [47](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_47) | foreign key(Cno) references Course(Cno), | -| | [48](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_48) | Degree Decimal(4,1) | -| | [49](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_49) | ); | -| | [50](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_50) | create table Teacher( | -| | [51](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_51) | Tno varchar (20) not null primary key, | -| | [52](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_52) | Tname varchar (20) not null, | -| | [53](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_53) | Tsex varchar (20) not null, | -| | [54](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_54) | Tbirthday datetime, | -| | [55](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_55) | Prof varchar (20), | -| | [56](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_56) | Depart varchar (20) not null | -| | [57](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_57) | ); | -| | [58](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_58) | insert into Student values | -| | [59](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_59) | (108,'曾华','男','1977-9-1',95033), | -| | [60](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_60) | (105,'匡明','男','1975-10-2',95031), | -| | [61](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_61) | (107,'王丽','女','1976-1-23',95033), | -| | [62](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_62) | (101,'李军','男','1976-2-20',95033), | -| | [63](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_63) | (109,'王芳','女','1975-2-10',95031), | -| | [64](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_64) | (103,'陆君','男','1974-6-3',95031); | -| | [65](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_65) | insert into Course VALUES | -| | [66](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_66) | ('3-105','计算机导论',825), | -| | [67](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_67) | ('3-245','操作系统',804), | -| | [68](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_68) | ('6-166','数字电路',856), | -| | [69](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_69) | ('9-888','高等数学',831); | -| | [70](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_70) | insert into Score VALUES | -| | [71](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_71) | (103,'3-245',86), | -| | [72](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_72) | (105,'3-245',75), | -| | [73](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_73) | (109,'3-245',68), | -| | [74](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_74) | (103,'3-105',92), | -| | [75](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_75) | (105,'3-105',88), | -| | [76](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_76) | (109,'3-105',76), | -| | [77](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_77) | (101,'3-105',64), | -| | [78](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_78) | (107,'3-105',91), | -| | [79](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_79) | (108,'3-105',78), | -| | [80](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_80) | (101,'6-166',85), | -| | [81](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_81) | (107,'6-166',79), | -| | [82](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_82) | (108,'6-166',81); | -| | [83](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_83) | insert into Teacher VALUES | -| | [84](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_84) | (804,'李诚','男','1958-12-2','副教授','计算机系'), | -| | [85](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_85) | (856,'张旭','男','1969-3-12','讲师','电子工程系'), | -| | [86](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_86) | (825,'王萍','女','1972-5-5','助教',' 计算机系'), | -| | [87](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_87) | (831,'刘冰','女','1977-8-14','助教',' 电子工程系'); | -| | [88](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_88) | | -| | [89](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_89) | -- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ | -| | [90](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_90) | 表1关联表3,表3关联表2 | -| | [91](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_91) | select * from Student inner join Score inner join Course on | -| | [92](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_92) | Student.Sno=Score.Sno and Score.Cno=Course.Cno; | -| | [93](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_93) | -- 2,查询没有学生的教师的所有信息 | -| | [94](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_94) | | -| | [95](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_95) | -- 1.查询Score表中的最高分的学生学号和课程号。 | -| | [96](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_96) | select Sno,Cno from Score; | -| | [97](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_97) | -- 2.查询所有学生的Sname、Cno和Degree列。 | -| | [98](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_98) | select Student.Sname,Score.Cno,Score.Degree from | -| | [99](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_99) | Score inner join Student on Student.Sno=Score.Sno; | -| | [100](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_100) | -- 3.查询所有学生的Sno、Cname和Degree列。 | -| | [101](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_101) | select Score.Sno,Course.Cname,Score.Degree FROM | -| | [102](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_102) | Course inner join Score on Course.Cno=Score.Cno; | -| | [103](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_103) | -- 4.查询所有学生的Sname、Cname和Degree列。 | -| | [104](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_104) | select Student.Sname,Course.Cname,Score.Degree FROM | -| | [105](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_105) | Student inner join Score inner join Course | -| | [106](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_106) | on Score.Sno=Student.Sno and Score.Cno=Course.Cno; | -| | [107](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_107) | -- 5.查询“95033”班学生的平均分。 | -| | [108](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_108) | select round(sum(Degree) / count(Class),1) 成绩 from Student inner join Score on | -| | [109](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_109) | Score.Sno=Student.Sno where Class='95033'; | -| | [110](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_110) | -- 6.查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 | -| | [111](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_111) | select * from Score where Cno='3-105' and degree>(sno='109'); | -| | [112](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_112) | -- 7.查询score中选学多门课程的同学中分数为非最高分成绩的记录。 | -| | [113](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_113) | | -| | [114](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_114) | -- 8.查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 | -| | [115](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_115) | select * from Student inner join Score inner join Course on | -| | [116](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_116) | Student.Sno=Score.Sno and Score.Cno=Course.Cno where | -| | [117](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_117) | (Score.Sno='109') (select avg(Degree) from Score); | -| | [138](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_138) | -- 17.查询所有任课教师的Tname和Depart. | -| | [139](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_139) | select tname,Depart from Teacher inner join Course on | -| | [140](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_140) | Course.Tno=Teacher.Tno | -| | [141](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_141) | where | -| | [142](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_142) | Teacher.Tno = Course.Tno; | -| | [143](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_143) | -- 18.查询所有未讲课的教师的Tname和Depart. | -| | [144](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_144) | select tname,Depart from Teacher inner join Course on | -| | [145](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_145) | Course.Tno=Teacher.Tno | -| | [146](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_146) | where | -| | [147](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_147) | not (Teacher.Tno = Course.Tno); | -| | [148](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_148) | -- 19.查询“男”教师及其所上的课程。 | -| | [149](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_149) | select Tname,Cname from Teacher inner join Course on | -| | [150](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_150) | Teacher.Tno=Course.Tno | -| | [151](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_151) | where | -| | [152](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_152) | Tsex='男'; | -| | [153](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_153) | -- 20.查询最高分同学的Sno、Cno和Degree列。 | -| | [154](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_154) | select sno,cno,Degree from Score | -| | [155](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_155) | WHERE | -| | [156](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_156) | (select max(Degree) from Score); | -| | [157](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_157) | -- 21.查询和“李军”同性别的所有同学的Sname. | -| | [158](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_158) | select sname from Student | -| | [159](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_159) | where | -| | [160](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_160) | Ssex=(select Ssex from Student where Sname='李军'); | -| | [161](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_161) | -- 22.查询和“李军”同性别并同班的同学Sname. | -| | [162](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_162) | select sname from Student | -| | [163](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_163) | where | -| | [164](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_164) | Ssex=(select Ssex from Student where Sname='李军') | -| | [165](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_165) | and | -| | [166](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_166) | Class=(select Class from Student where Sname='李军'); | -| | [167](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_167) | -- 23.查询所有选修“计算机导论”课程的“男”同学的成绩表. | -| | [168](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_168) | select Degree from Course inner join Score inner join Student on | -| | [169](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_169) | Course.Cno=Score.Cno and Score.Sno=Student.Sno | -| | [170](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_170) | where | -| | [171](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_171) | Ssex='男' | -| | [172](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_172) | and | -| | [173](https://gitee.com/cao-zhengbo/mysql-base/commit/ae00d0192f63374ed631babaaae4014f677c6b4e#68936acdd28e239fe05f04bcc92c71e2e723d5a2_0_173) | Cname=(select Cname from Course where Cname='计算机导论') ; | \ No newline at end of file diff --git "a/47\346\250\212\345\260\217\351\203\255/20230216 SQL\350\257\255\345\217\245,\346\225\260\346\215\256\347\261\273\345\236\213.md" "b/47\346\250\212\345\260\217\351\203\255/20230216 SQL\350\257\255\345\217\245,\346\225\260\346\215\256\347\261\273\345\236\213.md" deleted file mode 100644 index 1ebf7af691baeecdacf8de6b5f54619d32ac5ccb..0000000000000000000000000000000000000000 --- "a/47\346\250\212\345\260\217\351\203\255/20230216 SQL\350\257\255\345\217\245,\346\225\260\346\215\256\347\261\273\345\236\213.md" +++ /dev/null @@ -1,698 +0,0 @@ -# 第4章 SQL语句 - -SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。 - -## 4.1 SQL的分类 - -| 名称 | 解释 | 命令 | -| :-------------------: | :-------------------------------------------: | :----------------------------------------------------------: | -| DDL (数据定义语言) | 定义和管理数据对象结构,如数据库,数据表等 | 创建(create),修改(alter),删除(drop) show(展示)结构 | -| DML (数据操作语言) | 用于操作数据库对象中所包含的数据 | 增(insert),删(delete),改(update) 数据 | -| DQL (数据查询语言) | 用于查询数据库数据 | 查(select) | -| DCL (数据控制语 言) | 用于管理数据库的语言,包括管理权限及数 据更改 | grant(授权),commit(确认),rollback(回滚) | - -其他语句:USE语句,SHOW语句,SET语句等。这类的官方文档中一般称为命令。 - -## 4.2 SQL语法规范 - -(1)mysql的sql语法不区分大小写 - -- A:数据库的表中的数据是否区分大小写。这个的话要看表格的字段的数据类型、编码方式以及校对规则。 - -​ ci(大小写不敏感),cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关,区分大小写) - -- B:sql中的关键字,比如:create,insert等,不区分大小写。但是大家习惯上把关键字都“大写”。 - - -(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 - -(3)建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) - -(4)数据库和表名、字段名等对象名中间不要包含空格 - -```mysql -create database my mxdx; - -ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mxdx' at line 1 -``` - -(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名 - -```mysql -mysql> show databases; -+--------------------+ -| Database | -+--------------------+ -| information_schema | -| mxdx | -| mysql | -| performance_schema | -| sys | -+--------------------+ -5 rows in set (0.00 sec) - -mysql> create database mxdx; -ERROR 1007 (HY000): Can't create database 'mxdx'; database exists -``` - -```mysql -mysql> show tables; -+---------------------+ -| Tables_in_mxdx | -+---------------------+ -| student | -| temp | -+---------------------+ -2 rows in set (0.00 sec) - -mysql> create table temp(id int); -ERROR 1050 (42S01): Table 'temp' already exists -``` - -``` -mysql> create table tt( - -> id int, - -> id int - -> ); -ERROR 1060 (42S21): Duplicate(重复) column name 'id' -``` - -## 4.3 SQL脚本中如何加注释 - -SQL脚本中如何加注释 - -- 单行注释:#注释内容(mysql特有的) - -- 单行注释:--空格注释内容 其中--后面的空格必须有 - -- 多行注释:/* 注释内容 */ - -```mysql -create table tt( - id int, #编号 - `name` varchar(20), -- 姓名 - gender enum('男','女') - /* - 性别只能从男或女中选择一个, - 不能两个都选,或者选择男和女之外的 - */ -); -``` - -## 4.4 mysql脚本中的标点符号 - -mysql脚本中标点符号的要求如下: - -1. 本身成对的标点符号必须成对,例如:(),'',""。 - -2. 所有标点符号必须英文状态下半角输入方式下输入。 - - -几个特殊的标点符号: - -1. 小括号(): - - 在创建表、添加数据、函数使用、子查询、计算表达式等等会用()表示某个部分是一个整体结构。 - - 思考: 2+3 * 6 =20 和 (2+3) * 6 =30的区别 - -2. 单引号'':**字符串和日期类型的数据值使用单引号''引起来**,数值类型的不需要加标点符号。 -3. “2023-10--10” -4. 双引号"":列的别名可以使用引号"",**给表名取别名不要用引号**。 -5. 在MySQL中双引号通常等价于单引号 - - -```sql -create table tt( - id int - ; - -ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2 -``` - -```mysql -create table temp( - c char -); -insert into temp values('尚) ; #缺一半单引号 - -insert into temp values(‘尚’) ; #标点符号是中文 -``` - -```mysql -mysql> select * from student; -+------+------+ -| id | name | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) - -mysql> select id "学号",name "姓名" from student; -+------+------+ -| 学号 | 姓名 | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) -``` - -# 第5章 MySQL支持的数据类型 - -## 5.1 数值类型:包括整数和小数 - -数值类型主要用来存储数字,不同的数值类型提供不同的取值范围,可以存储的值范围越大,所需要的存储空间也越大。 - -对于MySQL中的数值类型,还要做如下说明: - -- 关键字INT是INTEGER的同义词。 -- 关键字DEC和FIXED是DECIMAL的同义词。 - -### 5.1.1 整数类型 - -![image-20211127205706588](第4章 SQL语句.assets/image-20211127205706588.png) - -**说明:** - -对于整数类型,MySQL还支持在类型名称后面加小括号(M),而小括号中的M表示显示宽度,M的取值范围是(0, 255)。int(M)这个M在字段的属性中指定了unsigned(无符号)和zerofill(零填充)的情况下才有意义。表示当整数值不够M位时,用0填充。如果整数值超过M位但是没有超过当前数据类型的范围时,就按照实际位数存储。当M宽度超过当前数据类型可存储数值范围的最大宽度时,也是以实际存储范围为准。 - -```mysql -#演示整数类型 -#创建一个表格,表格的名称“t_int”, -#包含两个字段i1和i2,分别是int和int(2)类型 -#create table t_int(i1 int,i2 int(2)); -create table t_int( - i1 int, - i2 int(2) #没有unsigned zerofill,(2)没有意义 -); - -#查看当前数据库的所有表格 -show tables; -show tables from 数据库名; - -#查看表结构 -desc 表名称; -desc t_int; - -mysql> desc t_int; -+-------+------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-------+------+------+-----+---------+-------+ -| i1 | int | YES | | NULL | | -| i2 | int | YES | | NULL | | -+-------+------+------+-----+---------+-------+ -2 rows in set (0.01 sec) - -#创建一个表格,表格的名称“t_int2”, -#包含两个字段i1和i2,分别是int和int(2)类型 -create table t_int2( - i1 int, - i2 int(2) unsigned zerofill -); - -mysql> desc t_int2; -+-------+--------------------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-------+--------------------------+------+-----+---------+-------+ -| i1 | int | YES | | NULL | | -| i2 | int(2) unsigned zerofill | YES | | NULL | | -+-------+--------------------------+------+-----+---------+-------+ -2 rows in set (0.01 sec) - -#添加数据到表格中 -insert into 表名称 values(值列表); -insert into t_int values(1234,1234); -insert into t_int2 values(1234,1234); - -#查询数据 -select * from 表名称; -select * from t_int; -select * from t_int2; - -#添加数据到表格中 -insert into 表名称 values(值列表); -insert into t_int values(1,1); -insert into t_int2 values(1,1); - -insert into t_int values(12222228854225548778455,12222228854225548778455); -mysql> insert into t_int values(12222228854225548778455,12222228854225548778455); -ERROR 1264 (22003): Out of range value for column 'i1' at row - -``` - - - -### 5.1.2 小数类型 - -MySQL中使用浮点数和定点数来表示小数。 - -浮点数有两种类型:单精度浮点数(FLOAT)和双精度浮点数(DOUBLE),定点数只有DECIMAL。浮点数和定点数都可以用(M,D)来表示。 - -- M是精度,表示该值总共显示M位,包括整数位和小数位,对于FLOAT和DOUBLE类型来说,M取值范围为0~255,而对于DECIMAL来说,M取值范围为0~65。 -- D是标度,表示小数的位数,取值范围为0~30,同时必须<=M。 - -DECIMAL实际是以字符串形式存放的,在对精度要求比较高的时候(如货币、科学数据等)使用DECIMAL类型会比较好。浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围,它的缺点是会引起精度问题。 - -![image-20211127210358326](第4章 SQL语句.assets/image-20211127210358326.png) - -```mysql -#演示小数类型 -#创建表格 -create table t_double( - d1 double, - d2 double(5,2) #-999.99~999.99 -); - -#查看表结构 -desc t_double; - -#添加数据 -insert into t_double values(2.5,2.5); - -#查看数据 -select * from t_double; -mysql> select * from t_double; -+------+------+ -| d1 | d2 | -+------+------+ -| 2.5 | 2.50 |#d2字段小数点后不够2位用0补充 -+------+------+ -1 row in set (0.00 sec) - -#添加数据 -insert into t_double values(2.5526,2.5526); -insert into t_double values(2.5586,2.5586); - -mysql> select * from t_double; -+--------+------+ -| d1 | d2 | -+--------+------+ -| 2.5 | 2.50 | -| 2.5526 | 2.55 |#小数点后有截断现象,并且会四舍五入 -| 2.5586 | 2.56 |#小数点后有截断现象,并且会四舍五入 -+--------+------+ -3 rows in set (0.00 sec) - - -#添加数据 -insert into t_double values(12852.5526,12852.5526); - -#d2字段整数部分超过(5-2=3)位,添加失败 -mysql> insert into t_double values(12852.5526,12852.5526); -ERROR 1264 (22003): Out of range value for column 'd2' at row 1 - - -#创建表格 -create table t_decimal( - d1 decimal, #没有指定(M,D)默认是(10,0) - d2 decimal(5,2) -); - - -#查看表结构 -desc t_decimal; -mysql> desc t_decimal; -+-------+---------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-------+---------------+------+-----+---------+-------+ -| d1 | decimal(10,0) | YES | | NULL | | -| d2 | decimal(5,2) | YES | | NULL | | -+-------+---------------+------+-----+---------+-------+ -2 rows in set (0.01 sec) - -#添加数据 -insert into t_decimal values(2.5,2.5); - -#查看数据 -select * from t_decimal; -mysql> select * from t_decimal; -+------+------+ -| d1 | d2 | -+------+------+ -| 3 | 2.50 | #d1字段小数点后截断 -+------+------+ -1 row in set (0.00 sec) - -insert into t_decimal values(12852.5526,12852.5526); - --- 把小数赋值给整数类型的字段时,会截断小数部分,考虑四舍五入 -insert into t_int2 values(1.5,1.5); -``` - - - -## 5.2 字符串类型 - -MySQL的字符串类型有CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET等。MySQL的字符串类型可以用来存储文本字符串数据,还可以存储二进制字符串。 - -文本字符串类型: - -![image-20211127210547156](第4章 SQL语句.assets/image-20211127210547156.png) - -二进制字符串类型: - -![image-20211127210608685](第4章 SQL语句.assets/image-20211127210608685.png) - -### 1、CHAR(M)为固定长度的字符串 - -CHAR(M)为固定长度的字符串, M表示最多能存储的字符数,取值范围是0~255个字符,如果未指定(M)表示只能存储1个字符。例如CHAR(4)定义了一个固定长度的字符串列,其包含的字符个数最大为4,如果存储的值少于4个字符,右侧将用空格填充以达到指定的长度,当查询显示CHAR值时,尾部的空格将被删掉。 - -```mysql -create table temp( - c1 char, - c2 char(3) -); -``` - -```mysql -insert into temp values('男','女');#成功 - -insert into temp values('桃花岛','桃花岛');#失败 -ERROR 1406 (22001): Data too long for column 'c1' at row 1 - -insert into temp values('男','桃花岛');#成功 -``` - -### 2、VARCHAR(M)为可变长度的字符串 - -- M表示最多能存储的字符数,最大范围由字符集及M共同决定 -- M不可缺省,必须指定(M),否则报错。 -- 实际长度达不到M值时,以实际长度为准。 -- VARBINARY类型的数据除了存储数据本身外,还需要1或2个字节来存储数据的字节数。 - -```mysql -create table temp( - name varchar #错误 -); -``` - -```mysql -create table temp( - name varchar(3) #最多不超过3个字符 -); -``` - -```mysql -insert into temp values('桃花岛'); - -insert into temp values('桃花岛真好');#ERROR 1406 (22001): Data too long for column 'name' at row 1 - -insert into temp values('好'); -``` - -```mysql -drop table temp; -create table temp( - name varchar(65535) -); -#ERROR 1074 (42000): Column length too big for column 'name' (max = 21845); use BLOB or TEXT instead -因为当前的表是UTF8,一个汉字占3个字节 -``` - -![image-20211127210826463](第4章 SQL语句.assets/image-20211127210826463.png) - -**使用场景**: - -- 身份证号、手机号码、QQ号、用户名username、密码password、银行卡号等固定长度的文本字符串适合使用CHAR类型; -- 评论、朋友圈、微博不定长度的文本字符串更适合使用VARCHAR类型。 - -## 5.3 日期时间类型 - -![image-20211127212047635](第4章 SQL语句.assets/image-20211127212047635.png) - -- 如果仅仅是表示年份信息,可以只使用YEAR类型,这样更节省空间,格式为“YYYY”,例如“2022”。YEAR允许的值范围是1901~2155。 -- 如果要表示年月日,可以使用DATE类型,格式为“YYYY-MM-DD”,例如“2022-02-04”。 -- 如果要表示时分秒,可以使用TIME类型,格式为“HH:MM:SS”,例如“10:08:08”。 -- 如果要表示年月日时分秒的完整日期时间,可以使用DATATIME类型,格式为“YYYY-MM-DD HH:MM:SS”,例如“2022-02-04 10:08:08”。 -- 如果需要经常插入或更新日期时间为系统日期时间,则通常使用TIMESTAMP类型,格式为“YYYY-MM-DD HH:MM:SS”,例如“2022-02-04 10:08:08”。TIMESTAMP与DATETIME的区别在于TIMESTAMP的取值范围小,只支持1970-01-01 00:00:01 UTC至2038-01-19 03:14:07 UTC范围的日期时间值,其中UTC是世界标准时间,并且TIMESTAMP类型的日期时间值在存储时会将当前时区的日期时间值转换为时间标准时间值,检索时再转换回当前时区的日期时间值,这会更友好。而DATETIME则只能反映出插入时当地的时区,其他时区的人查看数据必然会有误差的。另外,TIMESTAMP的属性受MySQL版本和服务器SQLMode的影响很大。 - -```mysql -create table temp( - d1 datetime, - d2 timestamp -); -``` - -```mysql -insert into temp values('2021-9-2 14:45:52','2021-9-2 14:45:52'); -``` - -```mysql -#修改当前的时区 -set time_zone = '+9:00'; -``` - -```mysql -insert into temp values('202192144552','202192144552'); -#ERROR 1292 (22007): Incorrect datetime value: '202192144552' for column 'd1' at row 1 -``` - -```mysql -insert into temp values('20210902144552','20210902144552'); -``` - -```mysql -insert into temp values('2021&9&2 14%45%52','2021#9#2 14@45@52'); -``` - -```mysql -create table temp( - d year -); -``` - -```mysql -insert into temp values(2021); -insert into temp values(85); -insert into temp values(22); -insert into temp values(69); -insert into temp values(0); -insert into temp values('0'); -``` - -```mysql -mysql> select * from temp; -+------+ -| d | -+------+ -| 2021 | -| 1985 | -| 2022 | -+------+ -3 rows in set (0.00 sec) -``` - -## 5.4 Enum和Set类型 - -无论是数值类型、日期类型、普通的文本类型,可取值的范围都非常大,但是有时候我们指定在固定的几个值范围内选择一个或多个,那么就需要使用ENUM枚举类型和SET集合类型了。 - -比如性别只有“男”或“女”;上下班交通方式可以有“地铁”、“公交”、“出租车”、“自行车”、“步行”等。 - -枚举和集合类型字段声明的语法格式如下: - -- 字段名ENUM(‘值1’,‘值2’,…‘值n’) - - -- 字段名 SET(‘值1’,‘值2’,…‘值n’) - - -ENUM类型的字段在赋值时,只能在指定的枚举列表中取值,而且一次只能取一个。枚举列表最多可以有65535个成员。ENUM值在内部用整数表示,每个枚举值均有一个索引值, MySQL存储的就是这个索引编号。例如,定义ENUM类型的列(‘first’, ‘second’, ‘third’)。 - -![image-20211127211743925](第4章 SQL语句.assets/image-20211127211743925.png) - -SET类型的字段在赋值时,可从定义的值列表中选择1个或多个值的组合。SET列最多可以有64个成员。SET值在内部也用整数表示,分别是1,2,4,8……,都是2的n次方值,因为这些整数值对应的二进制都是只有1位是1,其余是0。 - -![image-20211127211806889](第4章 SQL语句.assets/image-20211127211806889.png) - - **演示枚举类型:** - -```mysql -create table temp( - gender enum('男','女'), - hobby set('睡觉','打游戏','泡妞','写代码') -); -``` - -```mysql -insert into temp values('男','睡觉,打游戏'); #成功 - -insert into temp values('男,女','睡觉,打游戏'); #失败 -#ERROR 1265 (01000): Data truncated for column 'gender' at row 1 - -insert into temp values('妖','睡觉,打游戏');#失败 -#ERROR 1265 (01000): Data truncated for column 'gender' at row 1 - -insert into temp values('男','睡觉,打游戏,吃饭'); -#ERROR 1265 (01000): Data truncated for column 'hobby' at row 1 -``` - -```mysql -#文本类型中的枚举和集合 -#枚举:固定的几个字符串值,从中选择一个 -#集合:固定的几个字符串值,从中选择任意几个 - -create table t_enum_set( - gender enum('男','女'), - hobby set('游戏','睡觉','打代码','运动') -); - -#查看表结构 -desc t_enum_set; - -mysql> desc t_enum_set; -+--------+------------------------------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+--------+------------------------------------+------+-----+---------+-------+ -| gender | enum('男','女') | YES | | NULL | | -| hobby | set('游戏','睡觉','打代码','运动') | YES | | NULL | | -+--------+------------------------------------+------+-----+---------+-------+ -2 rows in set (0.01 sec) - - -#添加数据 -insert into t_enum_set -values('男','游戏'); - -#查看数据 -select * from t_enum_set; - -#添加数据 -insert into t_enum_set -values('男,女','游戏,睡觉'); - -mysql> insert into t_enum_set - -> values('男,女','游戏,睡觉'); -ERROR 1265 (01000): Data truncated for column 'gender' at row 1 - -#添加数据 -insert into t_enum_set -values('男','游戏,睡觉'); - -#添加数据 -insert into t_enum_set -values('妖','游戏,睡觉'); -mysql> insert into t_enum_set - -> values('妖','游戏,睡觉'); -ERROR 1265 (01000): Data truncated for column 'gender' at row 1 - -#添加数据 -insert into t_enum_set -values('男','游戏,睡觉,做饭'); -mysql> insert into t_enum_set - -> values('男','游戏,睡觉,做饭'); -ERROR 1265 (01000): Data truncated for column 'hobby' at row 1 - -insert into t_enum_set -values(2, 2); - -mysql> select * from t_enum_set; -+--------+-----------+ -| gender | hobby | -+--------+-----------+ -| 男 | 游戏 | -| 男 | 游戏,睡觉 | -| 女 | 睡觉 | -+--------+-----------+ -3 rows in set (0.00 sec) - -insert into t_enum_set -values(2, 5); -#5 可以看出 1和4的组合,00001 和 0100,0101 - -insert into t_enum_set -values(2, 7); -mysql> select * from t_enum_set; -+--------+------------------+ -| gender | hobby | -+--------+------------------+ -| 男 | 游戏 | -| 男 | 游戏,睡觉 | -| 女 | 睡觉 | -| 女 | 游戏,打代码 | -| 女 | 游戏,睡觉,打代码 | -+--------+------------------+ -5 rows in set (0.00 sec) - -insert into t_enum_set -values(2, 15); -mysql> select * from t_enum_set; -+--------+-----------------------+ -| gender | hobby | -+--------+-----------------------+ -| 男 | 游戏 | -| 男 | 游戏,睡觉 | -| 女 | 睡觉 | -| 女 | 游戏,打代码 | -| 女 | 游戏,睡觉,打代码 | -| 女 | 游戏,睡觉,打代码,运动 | -+--------+-----------------------+ -6 rows in set (0.00 sec) - -insert into t_enum_set -values(2, 25); -mysql> insert into t_enum_set - -> values(2, 25); -ERROR 1265 (01000): Data truncated for column 'hobby' at row 1 -``` - -## 5.5 数据字段属性 - - **unsigned** - -- 无符号的 - -- 声明该数据列不允许负数 - - **ZEROFILL** - -- 0填充的 - -- 不足位数的用0来填充 , 如int(3),5则为005 - -**auto_increment** - -- 自动增长的 , 每添加一条数据 , 自动在上一个记录数上加 1(默认) -- 通常用于设置主键 , 且为整数类型 -- 可定义起始值和步长 - - 当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表 - - SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局) - -**NULL 和 NOT NULL** - -- 默认为NULL , 即没有插入该列的数值 -- 如果设置为NOT NULL , 则该列必须有值 - -**DEFAULT** - -- 默认的 - -- 用于设置默认值 - -- 例如,性别字段,默认为"男" , 否则为 "女" ; 若无指定该列的值 , 则默认值为"男"的值 - -- ```mysql - -- 目标 : 创建一个school数据库 - -- 创建学生表(列,字段) - -- 学号int 登录密码varchar(20) 姓名,性别varchar(2),出生日期(datatime),家庭住 址,email - -- 创建表之前 , 一定要先选择数据库 - CREATE TABLE IF NOT EXISTS `student` ( - `id` int(4) NOT NULL AUTO_INCREMENT COMMENT '学号', - `name` varchar(30) NOT NULL DEFAULT '匿名' COMMENT '姓名', - `pwd` varchar(20) NOT NULL DEFAULT '123456' COMMENT '密码', - `sex` varchar(2) NOT NULL DEFAULT '男' COMMENT '性别', - `birthday` datetime DEFAULT NULL COMMENT '生日', - `address` varchar(100) DEFAULT NULL COMMENT '地址', - `email` varchar(50) DEFAULT NULL COMMENT '邮箱', - PRIMARY KEY (`id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8 - -- 查看数据库的定义 - SHOW CREATE DATABASE school; - -- 查看数据表的定义 - SHOW CREATE TABLE student; - -- 显示表结构 - DESC student; - -- 设置严格检查模式(不能容错了) - SET sql_mode='STRICT_TRANS_TABLES'; - ``` - - diff --git "a/47\346\250\212\345\260\217\351\203\255/20230218 SQL\347\272\246\346\235\237.md" "b/47\346\250\212\345\260\217\351\203\255/20230218 SQL\347\272\246\346\235\237.md" deleted file mode 100644 index 1b7ac73b4ffdbe5739637fcbd036190b1989b431..0000000000000000000000000000000000000000 --- "a/47\346\250\212\345\260\217\351\203\255/20230218 SQL\347\272\246\346\235\237.md" +++ /dev/null @@ -1,391 +0,0 @@ -# 约束 主键、唯一、非空、默认、自增、外键 - -1、主键约束 -(1)关键字是primary key -(2)特点 -A:每一个表只能有一个主键约束 -B:主键约束的字段值是不允许为null,也不允许重复的 -*/ - -CREATE TABLE teacher( - tid INT PRIMARY KEY, - tname VARCHAR(20) -); - -INSERT INTO teacher VALUES(1,'柴'); -/* -上面的insert语句执行两遍,就会报错 -错误代码: 1062 -Duplicate(重复的) entry(输入) '1' -for key 'teacher.PRIMARY' - -意思:违反了主键约束 -*/ - -INSERT INTO teacher VALUES(2,'柴'); -INSERT INTO teacher VALUES(NULL,'王'); -/* -错误代码: 1048 -Column 'tid' cannot be null -主键不允许为null -*/ - - -CREATE TABLE teacher( - tid INT PRIMARY KEY, - tname VARCHAR(20) PRIMARY KEY -); -/* -错误代码: 1068 -Multiple(重复的,多倍的) primary key defined(定义)*/ - - -/* -需求: - 有一个学生表: - stu(sid,sname,tel) - course(cid,cname,description) - xuanke(sid,cid,score) 记录某个学生选择的某门课的成绩 - - stu表可以选择sid作为主键 - course表可以选择cid作为主键 - xuanke表可以选择sid - -*/ -CREATE TABLE stu( - sid INT PRIMARY KEY, - sname VARCHAR(20), - tel CHAR(11) -); -CREATE TABLE course( - cid INT PRIMARY KEY, - cname VARCHAR(50), - description VARCHAR(100) -); -INSERT INTO stu VALUES(1,'张三','10086'); -INSERT INTO stu VALUES(2,'李四','10010'); - -INSERT INTO course VALUES(1,'java','基础课'); -INSERT INTO course VALUES(2,'mysql','高级课'); - -/* -表达 张三,选择了java和mysql课程,成绩分别为89和96分 - 李四,选择了java和mysql课程,成绩分别为88和100分 -*/ -/* -create table xuanke( - sid int primary key, - cid int PRIMARY KEY, - score int -);*/ -/* -错误代码: 1068 -Multiple primary key defined -*/ -/* -create table xuanke( - sid int primary key, - cid int, - score int -); -insert into xuanke values(1,1,89); -INSERT INTO xuanke VALUES(1,2,96);*/ -/* -错误代码: 1062 -Duplicate entry '1' for key 'xuanke.PRIMARY' -*/ -/* -create table xuanke( - id int primary key, - sid int , - cid int, - score int -);*/ -#解决方案一,单独使用一个id列当主键 - -#解决方案二:复合主键 -CREATE TABLE xuanke( - sid INT , - cid INT, - score INT, - PRIMARY KEY(sid,cid) #它俩的组合不能为NULL,并且唯一 -); -INSERT INTO xuanke VALUES(1,1,89); -INSERT INTO xuanke VALUES(1,2,96); -INSERT INTO xuanke VALUES(2,1,88); -INSERT INTO xuanke VALUES(2,2,100); - - -#建表后增加主键约束 -ALTER TABLE 表名称 ADD PRIMARY KEY(字段列表); -#(字段列表)如果是一个字段,就是一个字段是主键 -#(字段列表)如果是多个字段,就是复合主键 - -#例如 -ALTER TABLE student ADD PRIMARY KEY(sid); - -#如果想要删除主键约束 -ALTER TABLE 表名称 DROP PRIMARY KEY; - -ALTER TABLE student DROP PRIMARY KEY; - - -/* -如果希望某个字段的值,是唯一的,但不要求非空,它也不是主键。 -就可以给这样的字段加唯一键约束 - -2、唯一键约束: -(1)关键字:unique key -(2)特点 -A:允许为null,但是不能重复 -B:一个表可以有多个唯一键约束 -*/ -CREATE TABLE student( - sid INT PRIMARY KEY, - sname VARCHAR(20), - birthday DATE, - score INT, - gender ENUM('男','女'), - weight DOUBLE(4,1), - tel CHAR(11) UNIQUE KEY -); -INSERT INTO student(sid,sname,tel) VALUES -(1,'张三',NULL), -(2,'李四','10086'); - -INSERT INTO student(sid,sname,tel) VALUES -(3,'王五','10086'); - -#建表后增加唯一键约束 -ALTER TABLE 表名称 ADD UNIQUE KEY (字段列表); - -ALTER TABLE student ADD UNIQUE KEY(sname); - -DESC student; - - -#如果要用语句删除唯一键约束 -/* -mysql中,会给主键约束,唯一键约束,外键约束,自动创建索引。 -在底层会单独的索引表,来记录每一个索引值对应的数据地址。 -好比 书的目录页,单独有几页来存储 标题和页面, -哪个标题和对应的页面就像是索引表的意思。 -索引的作用是提高查询的效率。 -像唯一键约束,主键约束等,它们都是表中“关键“信息,可以通过它们快速的定位到某个记录。 -而且实际中根据“关键”信息查询记录的情况更多。 -例如:在一个大的学生信息管理系统中,查询自己的数据,那么根据“学号”或“身份证号”,“姓名”。 -*/ -ALTER TABLE 表名称 DROP INDEX 索引名; - - - - -/* -如果某个字段,不要求唯一,但是要求非空。那么就可以给字段加非空约束。 -3、非空约束 -*/ - -CREATE TABLE student( - sid INT PRIMARY KEY, - sname VARCHAR(20), - birthday DATE, - score INT NOT NULL, - gender ENUM('男','女'), - weight DOUBLE(4,1), - tel CHAR(11) UNIQUE KEY -); -INSERT INTO student(sid,sname,tel) VALUES -(3,'王五','10086'); -/* -错误代码: 1364 -Field 'score' doesn't have a default value*/ - -INSERT INTO student(sid,sname,score,tel) VALUES -(3,'王五',89,'10086'); - - -/* -4、默认值约束 -如果某个字段,在添加数据时未指定值时,希望不要用NULL处理,而是按照一个默认值处理, -就可以使用默认值约束。 -例如:学生性别,在未指定时,默认按照 男 处理 -*/ -CREATE TABLE student( - sid INT PRIMARY KEY, #主键约束 - sname VARCHAR(20) UNIQUE KEY, #唯一键约束 - birthday DATE, - score INT NOT NULL, #非空约束 - gender ENUM('男','女') NOT NULL DEFAULT '男', #非空 + 默认值约束 - weight DOUBLE(4,1), - tel CHAR(11) UNIQUE KEY #唯一键约束 -); -INSERT INTO student(sid,sname,score,tel) - VALUES(1,'张三',89,'10086'); - - INSERT INTO student(sid,sname,score,gender,tel) - VALUES(2,'小翠',89,'女','10010'); - - - #删除score的非空约束 - ALTER TABLE student MODIFY score INT; - - #增加非空约束 - ALTER TABLE student MODIFY score INT NOT NULL; - - #删除gender的默认值约束,保留非空约束 - ALTER TABLE student MODIFY gender ENUM('男','女') NOT NULL; - - #删除gender的非空约束,保留默认值约束 - ALTER TABLE student MODIFY gender ENUM('男','女') DEFAULT '男'; - - #保留非空和默认值约束 - - ALTER TABLE student MODIFY gender ENUM('男','女') DEFAULT '男' NOT NULL; - - -​ -/* -查看一个表的约束名等信息,查看系统库“information_schema”的“table_constraints” -*/ -SELECT * FROM information_schema.table_constraints WHERE table_name = '表名称'; - -SELECT * FROM information_schema.table_constraints WHERE table_name= 'student'; - -/* - -5、检查约束 (MySQL5.7不支持CHECK约束,在MySQL8.0中开始支持CHECK约束) -*/ - -CREATE TABLE student( - sid INT PRIMARY KEY, #主键约束 - sname VARCHAR(20) , - age INT CHECK (age>=18 && age<=35) -); -INSERT INTO student VALUES(1,'张三',25); -INSERT INTO student VALUES(2,'李四',45); -/* -Check constraint 'student_chk_1' is violated(侵犯,无效). -违反了检查约束*/ - -/* -6、外键约束 -约束两个表的关系,或者是一个表的两个字段之间的关系。 - -(1)主表(父表)和从表(子表) -主表:被依赖,被参考 -从表:依赖别人的,参考别人的 - -例如:员工表和部门表 -员工表中有一个部门编号字段,它的值是依赖于部门表的部门编号。 -员工表是从表。 -部门表示主表。 - -例如:学生表、课程表和选课表 -选课表中的学号,它的值是依赖于学生表的学号。 -选课表是从表, -学生表是主表。 -选课表中的课程编号,它的值是依赖于课程表的课程编号。 -选课表是从表, -课程表示主表。 - -选课表有两个外键。 - -例如:订单表,用户表 -订单表中有一个字段(用户名),它的值依赖于用户表。 -订单表就是从表, -用户表就是主表。 - -例如:订单明细表和订单表。 -订单明细表中的订单编号,它的值是依赖于订单表的订单编号。 -订单表就是主表, -订单明细表就是从表。 - -(2)外键的建立和指定要在从表中定义 -(3)关键字 foreign key -(4)格式 foreign key (从表的字段) references 主表(被依赖字段) -(5)要求 -A:主表必须先存在 -B:主表被依赖字段必须有索引,所以通常是主键列或唯一键列等才能作为被依赖字段。 -C:删除表时,要么先删除从表,再删除主表,要么先解除外键约束,然后各自删除。 -D:从(子)表的依赖字段的数据,必须在主(父)表被依赖字段中选择。 - 添加和修改都是这样的。 -E:主(父)表被依赖字段的数据不能轻易的删除和修改,要看是否被引用 - -外键约束等级为 on update/delete cascade /(set null) -*/ -/* -部门表 -*/ -CREATE TABLE dept( - did INT PRIMARY KEY, - dname VARCHAR(20) -); -CREATE TABLE emp( - eid INT, - ename VARCHAR(20), - deptid INT, #这里的部门编号可以和dept表中的部门编号名字不一样,但是数据类型和逻辑意义要一样 - FOREIGN KEY (deptid) REFERENCES dept(did) -); -#emp依赖于dept表 - -#删除表 -DROP TABLE dept; #失败 - -INSERT INTO emp VALUES(1,'张三',1); -/* -错误代码: 1452 -Cannot add or update a child row: -a foreign key constraint fails (`0106db`.`emp`, CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`deptid`) REFERENCES `dept` (`did`))*/ - -INSERT INTO dept VALUES(1,'财务'); -INSERT INTO emp VALUES(1,'张三',1); - - -CREATE TABLE emp( - eid INT, - ename VARCHAR(20), - deptid INT, #这里的部门编号可以和dept表中的部门编号名字不一样,但是数据类型和逻辑意义要一样 - FOREIGN KEY (deptid) REFERENCES dept(did) ON UPDATE CASCADE ON DELETE SET NULL # 更新时级联操作,删除时设置为null -); - - -/* -7、自增属性 -维护某个字段的值自动增长的一个属性。 -它的要求: -(1)一个表最多只能有一个字段是自增的 -(2)自增的字段必须是整数类型 -(3)自增的字段必须是键约束的字段(通常是主键、唯一键) - -自增字段赋值为null和0的时候,会自增, -如果赋值为其他的值,按照你指定的值来。 -*/ -CREATE DATABASE mxdx; -USE mxdx; - -CREATE TABLE stu( - sid INT AUTO_INCREMENT PRIMARY KEY, - sname VARCHAR(20) -); -/* -错误代码: 1075 -Incorrect table definition; -there can be only one auto column(只能是一个自动列) - and(并且) it must be defined as a key(必须是键列) -*/ - - -INSERT INTO stu VALUES(NULL,'张三'); -INSERT INTO stu VALUES(NULL,'李四'); -INSERT INTO stu VALUES(0,'王五'); -INSERT INTO stu VALUES(-1,'赵六'); -INSERT INTO stu VALUES(8,'王八'); -INSERT INTO stu VALUES(NULL,'小九'); - -ALTER TABLE 表名称 AUTO_INCREMENT = 起始值; -ALTER TABLE stu AUTO_INCREMENT = 1001; - -INSERT INTO stu VALUES(NULL,'小十'); -INSERT INTO stu VALUES(NULL,'小十1'); - -SHOW CREATE TABLE stu; \ No newline at end of file diff --git "a/47\346\250\212\345\260\217\351\203\255/20230221 SQL\347\232\204\344\275\234\344\270\232.md" "b/47\346\250\212\345\260\217\351\203\255/20230221 SQL\347\232\204\344\275\234\344\270\232.md" deleted file mode 100644 index e4e7b09c87f8180ce83810aadfee6430dd8b9a9f..0000000000000000000000000000000000000000 --- "a/47\346\250\212\345\260\217\351\203\255/20230221 SQL\347\232\204\344\275\234\344\270\232.md" +++ /dev/null @@ -1,411 +0,0 @@ -# 作业 - -## 第一题 - -1.创建数据库test01_company - -CREATE DATABASE test01_company CHARSET utf8; -USE test01_company; - - - -2.创建表格0ffices - -| 字段名 | 数据类型 | -| ---------- | ----------- | -| officeCode | int | -| city | varchar(30) | -| address | varchar(50) | -| country | varchar(50) | -| postalCode | varchar(25) | - -```mysql -CREATE TABLE offices( - officeCode INT, - city VARCHAR(30), - address VARCHAR(50), - country VARCHAR(50), - postalCode VARCHAR(25) -); -``` - - - -3.创建表格employees - -| 字段名 | 数据类型 | -| --------- | ------------- | -| empNum | int(11) | -| lastName | varchar(50) | -| firstName | varchar(50) | -| mobile | varchar(25) | -| code | int | -| jobTitle | varchar(50) | -| birth | date | -| Note | varchar(255) | -| Sex | varchar(5) | - -```mysql -CREATE TABLE employees( - empNum INT(11), - lastName VARCHAR(50), - firstName VARCHAR(50), - mobile VARCHAR(25), - `code` INT, - jobTitle VARCHAR(50), - birth date, - Note VARCHAR(255), - Sex VARCHAR(5) -); -``` - -**要求4:**将表employees的mobile字段修改到code字段后面。 - -```mysql -ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER `code`; -``` - -**要求5:**将表employees的birth字段改名为birthday; - -```mysql -ALTER TABLE employees CHANGE birth birthday DATE; -``` - -**要求6:**修改sex字段,数据类型为char(1) - -```mysql -ALTER TABLE employees MODIFY sex CHAR(1); -``` - -**要求7:**删除字段note; - -```mysql -ALTER TABLE employees DROP note; -``` - -**要求8:**增加字段名favoriate_activity,数据类型为varchar(100); - -```mysql -ALTER TABLE employees ADD favoriate_activity VARCHAR(100); -``` - -**要求9:**将表employees的名称修改为 employees_info - -```mysql -ALTER TABLE employees RENAME employees_info; -``` - - - -## 第二题 - -1.创建数据库test02db - -```mysql -CREATE DATABASE test02db CHARSET utf8; -USE test02db; -``` - - - -2.创建表格pet - -| 字段名 | 字段说明 | 数据类型 | -| ------- | -------- | ----------- | -| name | 宠物名称 | varchar(20) | -| owner | 宠物主人 | varchar(20) | -| species | 种类 | varchar(20) | -| sex | 性别 | char(1) | -| birth | 出生日期 | year | -| death | 死亡日期 | year | - -```mysql -CREATE TABLE pet( - `name` VARCHAR(20) COMMENT '宠物名称', - `owner` VARCHAR(20) COMMENT '宠物主人', - species VARCHAR(20) COMMENT '种类', - sex CHAR(1) COMMENT '性别', - birth year COMMENT '出生日期', - death year COMMENT '死亡日期' -); -``` - - - -3.添加记录 - -| name | owner | species | sex | birth | death | -| ------ | ------ | ------- | ---- | ----- | ----- | -| Fluffy | harold | Cat | f | 2003 | 2010 | -| Claws | gwen | Cat | m | 2004 | | -| Buffy | | Dog | f | 2009 | | -| Fang | benny | Dog | m | 2000 | | -| bowser | diane | Dog | m | 2003 | 2009 | -| Chirpy | | Bird | f | 2008 | | - -```mysql -INSERT INTO pet -VALUES - ('Fluffy','harold','Cat','f','2003','2010'), - ('Claws','gwen','Cat','m','2004',NULL), - ('Butty',NULL,'Dog','f','2009',NULL), - ('Fang','benny','Dog','m','2000',NULL), - ('bowser','diane','Dog','m','2003','2009'), - ('Chirpy',NULL,'Bird','f','2008',NULL); -``` - -4、 添加字段主人的生日owner_birth。 - -```mysql -ALTER TABLE pet ADD owner_birth date; -``` - -5、 将名称为Claws的猫的主人改为kevin - -```mysql -UPDATE pet SET `owner` = 'kevin' WHERE `name` = 'Claws'; -``` - -6、 将没有死的狗的主人改为duck - -```mysql -UPDATE pet SET `owner` = 'duck' WHERE species = 'Dog' AND death IS NULL; -``` - -7、 查询没有主人的宠物的名字; - -```mysql -SELECT `name` FROM pet WHERE `owner` IS NULL; -``` - -8、 查询已经死了的cat的姓名,主人,以及去世时间; - -```mysql -SELECT `name`, `owner`, death FROM pet WHERE species='Cat' AND death IS NOT NULL; -``` - -9、 删除已经死亡的狗 - -```mysql -DELETE FROM pet WHERE death is not null and species = 'Dog'; -``` - -10、查询所有宠物信息 - -```mysql -SELECT * FROM pet; -``` - - - -## 第三题 - -1.创建数据库:test03_company - -```mysql -CREATE DATABASE test03_company CHARSET utf8; -USE test03_company; -``` - - - -2.在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - -A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - -```mysql -CREATE TABLE department( - depid VARCHAR(5) NOT NULL PRIMARY KEY, - depname VARCHAR(5) NOT NULL, - deinfo VARCHAR(30) -); -``` - -B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - -- 雇员编号为主键; -- 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); -- 性别默认为男; - -```mysql -CREATE TABLE employee ( - empid VARCHAR(5) NOT NULL PRIMARY KEY, - `name` VARCHAR(5) NOT NULL, - sex VARCHAR(1) NOT NULL DEFAULT '男', - title VARCHAR(10), - birthday date NOT NULL, - depid VARCHAR(5), - FOREIGN KEY(depid) REFERENCES department(depid) ON UPDATE CASCADE ON DELETE SET NULL -); -``` - -C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - - - -3.给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) - -```mysql -CREATE TABLE salary( - empid VARCHAR(5) PRIMARY KEY, - basesalary INT, - titlesalary INT, - deduction INT -); -ALTER TABLE salary MODIFY empid VARCHAR(5); -ALTER TABLE salary ADD FOREIGN KEY(empid) REFERENCES employee(empid) ON UPDATE CASCADE ON DELETE CASCADE; -``` - - - -4.添加数据如下: - -部门表: - -| 部门编号 | 部门名称 | 部门简介 | -| -------- | -------- | ------------ | -| 111 | 生产部 | Null | -| 222 | 销售部 | Null | -| 333 | 人事部 | 人力资源管理 | - -```mysql -INSERT INTO department -VALUES -(111,'生产部',NULL), -(222,'销售部',NULL), -(333,'人事部','人力资源管理'); -``` - -雇员表: - -| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | -| -------- | ---- | ---- | ---------- | ---------- | ------------ | -| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | -| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | -| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | -| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | - -``` -INSERT INTO employee VALUES -(1001,'张三','男','高级工程师','1975-1-1',111), -(1002,'李四','女','助工','1985-1-1',111), -(1003,'王五','男','工程师','1978-11-11',222), -(1004,'张六','男','工程师','1999-1-1',222); -``` - -工资表: - -| 雇员编号 | 基本工资 | 职务工资 | 扣除 | -| -------- | -------- | -------- | ---- | -| 1001 | 2200 | 1100 | 200 | -| 1002 | 1200 | 200 | NULL | -| 1003 | 2900 | 700 | 200 | -| 1004 | 1950 | 700 | 150 | - -```mysql -INSERT INTO salary VALUES -(1001,2200,1100,200), -(1002,1200,200,NULL), -(1003,2900,700,200), -(1004,1950,700,150); -``` - - - -## 第四题 - -1.创建一个数据库:test04_school - -```mysql -CREATE DATABASE test04_school CHARSET utf8; -USE test04_school; -``` - - - -2.创建如下表格 - -表1 Department表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | -| DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | -| DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | - -```mysql -CREATE TABLE Department( - DepNo INT(10) UNIQUE PRIMARY KEY COMMENT '部门号', - DepName VARCHAR(20) COMMENT '部门名称', - DepNote VARCHAR(50) NOT NULL COMMENT '部门备注' -); -``` - -表2 Teacher表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| Number | 教工号 | int | 是 | 否 | 是 | 是 | -| Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | -| Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | -| Birth | 出生日期 | date | 否 | 否 | 否 | 否 | -| DepNo | 部门号 | int | 否 | 是 | 否 | 否 | -| Salary | 工资 | float | 否 | 否 | 否 | 否 | -| Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | - -```mysql -CREATE TABLE Teacher( - Number INT UNIQUE PRIMARY KEY COMMENT '教工号', - `Name` VARCHAR(30) COMMENT '姓名', - Sex VARCHAR(4) NOT NULL COMMENT '性别', - Birth date NOT NULL COMMENT '出生日期', - DepNo INT NOT NULL COMMENT '部门号', - Salary FLOAT NOT NULL COMMENT '工资', - Address VARCHAR(100) NOT NULL COMMENT '家庭住址', - FOREIGN KEY(DepNo) REFERENCES Department(DepNo) -); -``` - - - -3.添加记录 - -| **DepNo** | **DepName** | **DepNote** | -| --------- | ----------- | ------------------ | -| 601 | 软件技术系 | 软件技术等专业 | -| 602 | 网络技术系 | 多媒体技术等专业 | -| 603 | 艺术设计系 | 广告艺术设计等专业 | -| 604 | 管理工程系 | 连锁经营管理等专业 | - -```mysql -INSERT INTO Department VALUES -(601,'软件设计系','软件技术等专业'), -(602,'网络技术系','多媒体技术等专业'), -(603,'艺术设计系','广告艺术设计等专业'), -(604,'管理工程系','连锁经营管理等专业'); -``` - -| **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | -| ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | -| 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | -| 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | -| 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | -| 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | -| 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | - -``` -INSERT INTO Teacher VALUES -(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'), -(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'), -(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'), -(2004,'James','女','1980-10-20',602,3500,'四川省成都市'), -(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); -``` - - - -4.用SELECT语句查询Teacher表的所有记录。 - -```mysql -SELECT * FROM Teacher; -``` \ No newline at end of file diff --git "a/47\346\250\212\345\260\217\351\203\255/20230223 SQL\346\237\245\350\257\242select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" "b/47\346\250\212\345\260\217\351\203\255/20230223 SQL\346\237\245\350\257\242select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" deleted file mode 100644 index 8fc1d7bd0ff7ec65804707e2938b1f1a8565b66a..0000000000000000000000000000000000000000 --- "a/47\346\250\212\345\260\217\351\203\255/20230223 SQL\346\237\245\350\257\242select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" +++ /dev/null @@ -1,376 +0,0 @@ -# 查询select语句和运算符 - -### select语句格式: - -```mysql -SELECT 字段列表 FROM 表名称; - -SELECT 字段列表 FROM 表名称 WHERE 条件; -``` - - - -### 使用别名(临时名称) - -```mysql -select 字段名1 as "别名1", 字段名2 as "别名2" from 表名称 as 别名; -``` - -- 列的别名有空格时,请加双引号。**==列的别名==中没有空格时,双引号可以加也可以不加**。 -- ==**表的别名不能加双引号**==,表的别名中间不能包含空格。 -- as大小写都可以,as也完全可以省略。 - -```mysql -示例: -mysql> select id "学号",name "姓名" from student; -+------+------+ -| 学号 | 姓名 | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) - -mysql> select id 学号,name 姓名 from student; -+------+------+ -| 学号 | 姓名 | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) -``` - - - -### 结果去重 - -mysql可以在查询结果中使用distinct关键字去重。 - -```mysql -select distinct 字段列表 from 表名称 【where 条件】; - -示例: -select distinct did from t_employee; -``` - - - -### 算术运算符 - -```mysql -加:+ - 在MySQL +就是求和,没有字符串拼接 -减:- -乘:* -除:/ div(只保留整数部分) - div:两个数相除只保留整数部分 - /:数学中的除 -模:% mod - -mysql中没有 +=等运算符 -``` - - - -### 比较运算符 - -```mysql -大于:> -小于:< -大于等于:>= -小于等于:>= -等于:= 不能用于null判断 -不等于:!= 或 <> 不能用于null判断 -判断是null 用 is null 或 用 <=> null -判断不是null is not null -``` - - - -### 区间或集合范围比较运算符 - -```mysql -区间范围:between x and y - not between x and y -集合范围:in (x,x,x) - not in(x,x,x) -between ... and ... 结果包含两端的边界 - -示例: -#查询薪资在[10000,15000] -select * from t_employee where salary>=10000 && salary<=15000; -select * from t_employee where salary between 10000 and 15000; - -#查询籍贯在这几个地方的 -select * from t_employee where work_place in ('北京', '浙江', '江西'); - -#查询薪资不在[10000,15000] -select * from t_employee where salary not between 10000 and 15000; - -#查询籍贯不在这几个地方的 -select * from t_employee where work_place not in ('北京', '浙江', '江西'); -``` - - - -### 模糊匹配比较运算符 - -%:代表任意个字符 - -_:代表一个字符,如果两个下划线代表两个字符 - -```mysql -示例: -#查询名字中包含'冰'字 -select * from t_employee where ename like '%冰%'; - -#查询名字以‘雷'结尾的 -select * from t_employee where ename like '%远'; - -#查询名字以’李'开头 -select * from t_employee where ename like '李%'; - -#查询名字有冰这个字,但是冰的前面只能有1个字 -select * from t_employee where ename like '_冰%'; - -#查询当前mysql数据库的字符集情况 -show variables like '%character%'; -``` - - - -### 逻辑运算符 - -```mysql -逻辑与:&& 或 and -逻辑或:|| 或 or -逻辑非:! 或 not -逻辑异或: xor - -示例: -#查询薪资高于15000,并且性别是男的员工 -select * from t_employee where salary>15000 and gender='男'; -select * from t_employee where salary>15000 && gender='男'; - -select * from t_employee where salary>15000 & gender='男';#错误得不到值 &按位与 -select * from t_employee where (salary>15000) & (gender='男'); - -#查询薪资高于15000,或者did为1的员工 -select * from t_employee where salary>15000 or did = 1; -select * from t_employee where salary>15000 || did = 1; - -#查询薪资不在[15000,20000]范围的 -select * from t_employee where salary not between 15000 and 20000; -select * from t_employee where !(salary between 15000 and 20000); - -#查询薪资高于15000,或者did为1的员工,两者只能满足其一 -select * from t_employee where salary>15000 xor did = 1; -select * from t_employee where (salary>15000) ^ (did = 1); -``` - - - -### 关于null值的问题 - -```mysql -#(1)判断时 -xx is null -xx is not null -xx <=> null - -#(2)计算时 -ifnull(xx,代替值) 当xx是null时,用代替值计算 - -示例: -#查询员工的实发工资,实发工资 = 薪资 + 薪资 * 奖金比例 -select ename , salary + salary * commission_pct "实发工资" from t_employee; #失败,当commission_pct为null,结果都为null - -select ename ,salary , commission_pct, salary + salary * ifnull(commission_pct,0) "实发工资" from t_employee; -``` - - - -### 位运算符 - -```mysql -左移:<< -右移:>> -按位与:& -按位或:| -按位异或:^ -按位取反:~ -``` - - - -# 作业 - -## 第1题:员工表 - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - -```mysql -CREATE DATABASE test03 CHARSET utf8; -USE test03; - -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - -**要求1:**查询出薪资在12000~13000之间的员工信息。 - -```mysql -SELECT * FROM employee WHERE salary BETWEEN 12000 AND 13000; -``` - -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -```mysql -SELECT id,`name`,addr FROM employee WHERE `name` LIKE '刘%'; -``` - -**要求3:**将“李四”的家庭住址改为“广东韶关” - -```mysql -UPDATE employee SET addr = '广东韶关' WHERE `name` = '李四'; -``` - -**要求4:**查询出名字中带“小”的员工 - -```mysql -SELECT `name` FROM employee WHERE `name` LIKE '%小%'; -``` - -**要求5:**查询出薪资高于11000的男员工信息 - -```mysql -SELECT * FROM employee WHERE salary>11000 AND sex='男'; -``` - -**要求6:**查询没有登记电话号码的员工 - -```mysql -SELECT `name` FROM employee WHERE tel is NULL; -``` - -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -```mysql -SELECT `name` FROM employee WHERE sex = '男' AND salary = 12000 OR addr = '广东深圳' OR addr='广东广州'; -``` - -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - -```mysql -SELECT `name`,salary FROM employee; -``` - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```my -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -``` - -**要求1:** 查询大国 的国家名称、人口和面积。 - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) - -- 人口至少为 2500 万(即 25000000) - - ```mysql - SELECT `name`,area,population FROM countries_info WHERE area>3000000 OR population>=25000000; - ``` - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -```mysql -SELECT * FROM countries_info WHERE continent = 'Asia'; -``` - -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -```mysql -SELECT * FROM countries_info WHERE area<10000 AND population<100000; -``` - -**要求4:**查询国家名字中包含“o“字母的国家信息 - -```mysql -SELECT * FROM countries_info WHERE `name` LIKE '%o%'; -``` - -**要求5:**查询GDP值超过10000000000的国家信息 - -```mysql -SELECT * FROM countries_info WHERE gdp>10000000000; -``` - -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -```mysql -SELECT `name` 国家名,population 人口,gdp GDP值,gdp/population AS 人均贡献GDP值 FROM countries_info; -``` - -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - -```mysql -SELECT * FROM countries_info WHERE gdp/population<1000; -``` - -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -```mysql -SELECT `name` 国家名,population 人口,gdp GDP值,area/population AS 人均国土面积值 FROM countries_info; -``` \ No newline at end of file diff --git "a/47\346\250\212\345\260\217\351\203\255/20230308 SQL\344\273\200\344\271\210\346\230\257\345\255\220\346\237\245\350\257\242.md" "b/47\346\250\212\345\260\217\351\203\255/20230308 SQL\344\273\200\344\271\210\346\230\257\345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index e8955407fd010c881b68078518ded810a0d6a21b..0000000000000000000000000000000000000000 --- "a/47\346\250\212\345\260\217\351\203\255/20230308 SQL\344\273\200\344\271\210\346\230\257\345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,259 +0,0 @@ -# 什么是子查询 - --- 嵌套在其它SQL语句中的查询语句, --- 子查询通常先运行,所以要用()包括起来 --- 子查询的运行结果,可以做为其它语句的条件、数据源等 - -select ① from ③ where ②; - - - - -## 形式一,放在select 后面 -#(1)在“t_employee”表中查询每个人薪资和公司平均薪资的差值, -#并显示员工薪资和公司平均薪资相差5000元以上的记录。 --- select salary-avg(salary) from t_employee;# 错误,只有一行 --- 第一步,查出公司平均薪资是多少钱 -select avg(salary) from t_employee; --- 第二步 --- SELECT ename,salary, --- salary-(select avg(salary) from t_employee) avgnum --- from t_employee --- where avgnum > 5000; --- 1054 - Unknown column 'avgnum' in 'where clause' --- where 是不能用别名和聚合函数,having 才支持别名和聚合函数 - -SELECT ename,salary, - salary-(select avg(salary) from t_employee) avgnum -from t_employee -where abs(salary-(select avg(salary) from t_employee)) > 5000;-- ABS(X) 取x绝对值 - -(2)在“t_employee”表中查询每个部门平均薪资和公司平均薪资的差值。 -## 第一步,根据部门编号,分组,查询每个部门的平均薪资 -select ifnull(did,'编外') 部门编号,round(abs(avg(salary)-(select avg(salary) from t_employee) ),2) 差值 -from t_employee -group by did; - - - - -## 形式二,放在where / having 后面 -#(1)在“t_employee”表中查询薪资最高的员工姓名(ename)和薪资(salary)。 -## 第一步,找出最大的薪资是多少钱 -select max(salary) from t_employee; -## 第二步,查询谁的薪资=最大的薪资 -select ename,salary from t_employee where salary=(select max(salary) from t_employee); - - -#(2)在“t_employee”表中查询比全公司平均薪资高的男员工姓名和薪资。 -## 第一步,查平均薪资是多少钱 -select avg(salary) from t_employee; -## 第二步,查询谁的薪资>平均薪资 and gender='男' -select ename,salary from t_employee where salary>(select avg(salary) from t_employee) and gender='男'; - -#(3)在“t_employee”表中查询和“白露”,“谢吉娜”同一部门的员工姓名和电话。 -## 第一步,查询“白露”,“谢吉娜”她们的部门编号did -select did from t_employee where ename = '白露' or ename = '谢吉娜'; - -## 第二步,查询谁的部门编号和她们两一样 -###### select * from t_employee where did = (select did from t_employee where ename = '白露' or ename = '谢吉娜'); -#> 1242 - Subquery (子查询) returns 返回 more than 1 row 超出1行的记录 - select ename,tel from t_employee where did in (select did from t_employee where ename = '白露' or ename = '谢吉娜'); - - select ename,tel from t_employee where did = any (select did from t_employee where ename = '白露' or ename = '谢吉娜'); - - /* - 总结: - where或having后的子查询,其子查询的结果有三种形式 - 1,单列单个值 ,可直接使用用=,>,<,>=,<=,!=这些比较运算符 - 2,单列多个值,可使用in,not in进行比较 - 3,单列多个值,可以用=,>,<,>=,<=,!=,搭配any,all,等关键字与查询结果进行比较 -*/ - - - /* - 聚合函数是对多行数据的运算, - group by 一般要结合聚合函数使用。 - */ - -## 形式三,放在from后面,子查询当作一个临时表使用,必须要给别名 -#(1)查询每个部门的部门编号、部门名称、部门平均薪资。 - -分析 部门名称在deparment部门表中,而薪资在员工表中。,所以要联表查询 - --- 方案一,先联表,再分组 -SELECT b.did,dname,avg(salary) as 平均薪资 -from t_employee a right join t_department b on a.did=b.did -group by b.did; - --- 方案二,先分组,再联表 -select b.did,dname,num -from (select did,avg(salary) num from t_employee group by did) as a right join t_department b on a.did=b.did - order by b.did -; -- group by 一般要结合聚合函数使用。 - -/* - 子查询的结果是单列:可以放在select 参与运算,或是作为字段,也可以放where/having后当条件 - 如果是多列,多个值,只能放在from 后面当一个临时表使用,并且必须要给这个表取别名 -*/ - - - -# 作业 - -```mysql -create database test charset utf8; - -use test; - -CREATE TABLE `stuinfo` ( - `stuNO` varchar(10) NOT NULL, - `stuName` varchar(10) NOT NULL, - `stuSex` enum('男','女') NOT NULL, - `stuAge` int(10) NOT NULL, - `stuAddress` varchar(255) NOT NULL, - `stuSeat` int(10) NOT NULL, - PRIMARY KEY (`stuNO`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -INSERT INTO `stuinfo` VALUES ('s2501', '张秋利', '男', 20, '美国硅谷', 1); -INSERT INTO `stuinfo` VALUES ('s2502', '李斯文', '女', 18, '湖北武汉', 2); -INSERT INTO `stuinfo` VALUES ('s2503', '马文才', '男', 18, '湖南长沙', 3); -INSERT INTO `stuinfo` VALUES ('s2504', '欧阳俊雄', '女', 21, '湖北武汉', 4); -INSERT INTO `stuinfo` VALUES ('s2505', '梅超风', '男', 16, '湖北武汉', 5); -INSERT INTO `stuinfo` VALUES ('s2506', '陈旋风', '男', 19, '美国硅谷', 6); - -CREATE TABLE `stuexam` ( - `examNO` int(10) NOT NULL, - `stuNO` varchar(10) NOT NULL, - `writtenExam` int(10) NOT NULL, - `labExam` int(10) NOT NULL, - PRIMARY KEY (`examNO`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -INSERT INTO `stuexam` VALUES (1, 's2501', 50, 70); -INSERT INTO `stuexam` VALUES (2, 's2502', 60, 65); -INSERT INTO `stuexam` VALUES (3, 's2503', 86, 70); -INSERT INTO `stuexam` VALUES (4, 's2504', 40, 80); -INSERT INTO `stuexam` VALUES (5, 's2505', 70, 85); -INSERT INTO `stuexam` VALUES (6, 's2506', 85, 90); -SET FOREIGN_KEY_CHECKS = 1; - -CREATE TABLE `stumarks` ( - `examNo` int(10) NOT NULL, - `stuID` varchar(10) NOT NULL, - `score` int(10) NOT NULL, - PRIMARY KEY (`examNo`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -INSERT INTO `stumarks` VALUES (1, 's2501', 88); -INSERT INTO `stumarks` VALUES (2, 's2502', 92); -INSERT INTO `stumarks` VALUES (3, 's2503', 53); -INSERT INTO `stumarks` VALUES (4, 's2502', 60); -INSERT INTO `stumarks` VALUES (5, 's2502', 99); -INSERT INTO `stumarks` VALUES (6, 's2503', 82); -``` - -1.查询出年龄比班上平均年龄大的学生的信息 - -```mysql -select * from stuinfo where stuAge > (select avg(stuAge) from stuinfo); -``` - -2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) - -```mysql -select stuno,stuname,stusex,max(score) 最高分 from stuinfo a right join stumarks b on a.stuno=b.stuid group by a.stuno; -``` - -3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) - -```mysql -select a.stuno,stuname,stusex,round((writtenexam+labexam)/2,2) 平均分 from stuinfo a left join stuExam b on a.stuno=b.stuno group by a.stuno; -``` - -4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) 普通查询 - -```mysql -select * from stuinfo where stusex='男' and stuage>=20; -``` - -子查询 - -```mysql -select * from stuinfo where stusex='男' and stuage in (select stuage from stuinfo where stuage>=20); -``` - -5.查询出年龄比所有男生年龄都大的女生的信息 - -```mysql -select * from stuinfo where stuage not in (select stuage from stuinfo where stusex='男') and stusex='女'; -``` - -6.查询出所有选修课程都及格的学生的信息 (stuMarks) - -```mysql -select b.* from stumarks a left join stuinfo b on a.stuid=b.stuno where stuid not in (select stuid from stumarks where score<60) group by stuid; -``` - -7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) 表连接 - -```mysql -select b.* from stumarks a left join stuinfo b on a.stuid=b.stuno group by stuid; -``` - -in方法 - -```mysql -select * from stuinfo where stuno in (select stuid from stumarks group by stuid); -``` - -8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - -表连接 - -```mysql -select a.* from stuinfo a left join stumarks b on a.stuno=b.stuid where b.stuid is null; -``` - -in方法 - -```mysql -select * from stuinfo where stuno not in (select stuid from stumarks); -``` - -9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) - -```mysql -select a.* from stuinfo a left join stumarks b on a.stuno=b.stuid where score in (select score from stumarks where score>90) group by stuid; -``` - -10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) - -```mysql -select * from (select stuid,(sum(score))/(count(score)) from stumarks group by stuid) a right join stuinfo b on a.stuid=b.stuno where stuid is not null; -``` - -11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) - -```mysql -select a.* from stuinfo a left join stumarks b on a.stuno=b.stuid where score > (select score from stumarks where stuid='s2501') group by stuid; -``` - -12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) - -```mysql -select a.* from stuinfo a,(select stuid from stumarks where stuid!='s2501' group by stuid having max(score)>(select min(score) from stumarks where stuid='s2501')) b where a.stuno=b.stuid; -``` - -13.查询班上比所有男生年龄都要大的女生的信息 - -```mysql -select * from stuinfo where stuage not in (select stuage from stuinfo where stusex='男') and stusex='女'; -``` - -14.查询出只要比某个男生年龄大的女生的信息 - -```mysql -select * from stuinfo where stuage>(select min(stuage) from stuinfo where stusex='男') and stusex='女'; -``` \ No newline at end of file diff --git "a/48 \351\251\254\345\256\217\350\276\276/20230219 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" "b/48 \351\251\254\345\256\217\350\276\276/20230219 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" deleted file mode 100644 index d5afaeb17aeef3989ac694bde5a3f3d87bf3262a..0000000000000000000000000000000000000000 --- "a/48 \351\251\254\345\256\217\350\276\276/20230219 \346\225\260\346\215\256\345\272\223\344\275\234\344\270\232.md" +++ /dev/null @@ -1,35 +0,0 @@ --- 1、创建数据库test01_market -CREATE DATABASE test01_market --- 2、创建表格customers -USE test01_market; - -CREATE TABLE customers -( -c_num INT(11), -c_name VARCHAR(50), -c_contact VARCHAR(50), -c_city VARCHAR(50), -c_birth date -); - -| -- | 字段名 | 数据类型 | -| -------------------------------------------------------------------- | --------- | ---------------------------- | -| -- | c_num | int(11) | -| -- | c_name | varchar(50) | -| -- | c_contact | varchar(50) | -| -- | c_city | varchar(50) | -| -- | c_birth | date | -| -- | | | -| -- **要求3:**将c_contact字段移动到c_birth字段后面 | | | -| ALTER TABLE customers MODIFY c_contact varchar(50) after c_birth ; | | | -| -- **要求4:**将c_name字段数据类型改为 varchar(70) | | | -| ALTER TABLE customers MODIFY c_name varchar(70); | | | -| -- **要求5:**将c_contact字段改名为c_phone | | | -| ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); | | | -| -- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) | | | -| ALTER TABLE customers ADD c_gender char(1) AFTER c_name; | | | -| -- **要求7:**将表名改为customers_info | | | -| use test01_market; | | | -| ALTER TABLE customers RENAME TO customers_info; | | | -| -- **要求8:**删除字段c_city | | | -| ALTER ALTER customers_info DROP c_city | | | diff --git "a/48 \351\251\254\345\256\217\350\276\276/20230223\344\270\223\344\270\232\350\257\276\344\275\234\344\270\232.md" "b/48 \351\251\254\345\256\217\350\276\276/20230223\344\270\223\344\270\232\350\257\276\344\275\234\344\270\232.md" deleted file mode 100644 index 6934d5a0f14d9acf8d443ecb33263151132f8962..0000000000000000000000000000000000000000 --- "a/48 \351\251\254\345\256\217\350\276\276/20230223\344\270\223\344\270\232\350\257\276\344\275\234\344\270\232.md" +++ /dev/null @@ -1,295 +0,0 @@ -# 笔记 - -非空约束:not null - -默认约束:default 默认值 - -唯一约束:unique key,(值可以为空,但值不能重复) - -主键约束:primary key(默认非空,一个表只能有一个主键约束) - -复合主键primary key(字段名1,字段名2) 表示字段1和字段2的组合是唯一的 - -自增约束(和主键一起使用):auto_increment(不给值或者给0或NULL,会在列表最大值的基础上自增) - -删除唯一约束:alter table 表名称 drop index 索引名 - -删除主键约束:alter table 表名称 drop primary key; - -删除自增约束:alter table 表名称 modify 字段名 数据类型; - -添加自增约束:alter table 表名称 modify 字段名 数据类型 auto_increment; - -外键约束:foreign key - -例:create table 主表名称( - -字段1 数据类型 primary key, - -字段2 数据类型 - -); - -create table 从表名称( - -字段1 数据类型 primary key, - -字段2 数据类型, - -foreign key(从表字段) feferences 主表名(被参考字段) - -); - -从表字段的数据类型必须和主表名(被参考字段)数据类型一样。 - --- ## 第1题 --- - --- 1、创建数据库test01_company -CREATE DATABASE test01_company --- 2、创建表格offices -use test01_company; - -| -- | 字段名 | 数据类型 | -| --- | ---------- | ----------- | -| -- | officeCode | int | -| -- | city | varchar(30) | -| -- | address | varchar(50) | -| -- | country | varchar(50) | -| -- | postalCode | varchar(25) | - -CREATE table offices ( - officeCode int, - city VARCHAR(30), - address VARCHAR(30), - country VARCHAR(50), - postalCode varchar(25) -); - --- 3、创建表格employees -use test01_company; -CREATE table employees ( --- | 字段名 | 数据类型 | --- | --------- | ------------- | --- | empNum | int(11) | --- | lastName | varchar(50) | --- | firstName | varchar(50) | --- | mobile | varchar(25) | --- | code | int | --- | jobTitle | varchar(50) | --- | birth | date | --- | Note | varchar(255) | --- | Sex | varchar(5) | - empNum int(11), - lastname varchar(50), - firstName varchar(50), - mobile VARCHAR(25), - code int, - jobTitle varchar(50), - birth date, - Note VARCHAR(255), - Sex VARCHAR(5) - ); --- **要求4:**将表employees的mobile字段修改到code字段后面。 -ALTER TABLE employees MODIFY mobile int after code ; --- **要求5:**将表employees的birth字段改名为birthday; -alter table employees change bitth bithday date ; --- **要求6:**修改sex字段,数据类型为char(1)。 -alter table employees modify sex char(1); --- **要求7:**删除字段note; -alter table drop note; --- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); -alter table employees add favoriate_activity VARCHAR(100); --- **要求9:**将表employees的名称修改为 employees_info -alter table employees rename [to] employees_info; --- ```mysql --- --- ``` --- --- --- --- ## 第2题 --- --- 1、创建数据库test02db -CREATE DATABASE test02_db; --- 2、创建表格pet -use test02_db; --- | 字段名 | 字段说明 | 数据类型 | --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | -create table pet( - name VARCHAR(20), - owner varchar(20), - species varchar(20), - sex char(1), - birth year , - death year -) --- 3、添加记录 -alter database test02_db CHARACTER set utf8; -alter table pet default charset utf8; --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | -insert into pet values( -`Fluffy`, `harold` ,`Cat`, `f `, ` 2003` ,`2010` -`Claws`, ` gwen `, `Cat`, ` m ` , `2004` -`Buffy`, ` Dog`, ` f `, | `2009` -`Fang`, `benny `, `Dog`, ` m `, `2000` -`bpswer`, `diane`, `Dog`, `m`, `2003`,`2009` -`chirpy`,`bird` ,`f`, `2008`, -) --- 4、 添加字段主人的生日owner_birth。 -alter table pet add owner_borth int; --- 5、 将名称为Claws的猫的主人改为kevin -update pet set `owner`=`kevin` where name=`Claws` --- 6、 将没有死的狗的主人改为duck -updatepet set `owner`=`duck` where death is null ; --- 7、 查询没有主人的宠物的名字; -select `owner` death where `owner` is null; --- 8、 查询已经死了的cat的姓名,主人,以及去世时间; -select name,`owner`,death from pet where species=`Cat`; --- 9、 删除已经死亡的狗 -delete from pet where species=`dog` and death=`2009`; --- 10、查询所有宠物信息 -select * from pet; --- ```sql --- --- ``` --- --- ## 第3题 --- --- 1、创建数据库:test03_company -create database test03_company; -use test03_company; --- ```sql --- create database test03_company charset utf8; --- ``` --- --- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 --- --- A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 --- --- ```mysql --- use test03_company ; -create table department( - depid int primary key auto_increment, - depname char(10) not null unique key, - deinfo varchar(200) - ) --- ``` --- --- B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 --- --- * ​ 雇员编号为主键; --- * ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); --- * ​ 性别默认为男; --- --- ```mysql -create table employee ( - empid int primary key auto_increment, - name varchar(10) not null, - sex enum('男','女') not null default '男', - title varchar(10), - birthday date, - depid int foreign key references department(depid) - ) --- ``` --- --- C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 --- --- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) -create table salary( - empid int primary key, - basesalary double, - titlesalary double, - deduction double, - foreign key(empid) referenences employee (empid) - ); --- 4、添加数据如下: --- --- 部门表: -desc departmnet; -show create table department; -alter table department convert to charater set utf8; -insert into department values --- | 部门编号 | 部门名称 | 部门简介 | --- | -------- | -------- | ------------ | -( 111, ` 生产部 ` , Null ) -( 222 , ,`销售部 ` , Null ) -( 333,`人事部 ` ,人力资源管理 ) --- --- 雇员表: -insert into employee values --- | 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | --- | -------- | ---- | ---- | ---------- | ---------- | ------------ | -(1001 , '张三' , '男' , '高级工程师' ,' 1975-1-1' , '111' ); -(1002 ,'李四' , '女' , '助工' , '1985-1-1' , '111' ); - (1003 ,'王五' , '男' , '工程师' , '1978-11-11' , '222' ); - (1004 ,'张六', '男', '工程师' , '1999-1-1' ,'222'); --- --- 工资表: -insert into salary values --- | 雇员编号 | 基本工资 | 职务工资 | 扣除 | --- | -------- | -------- | -------- | ---- | -(1001 , 2200 , 1100 , 200 ); -( 1002 , 1200 , 200 , NULL); -( 1003 , 2900 , 700 , 200) ; - (1004, 1950, 700 , 150); --- --- --- --- ## 第4题 --- --- 1、创建一个数据库:test04_school --- --- 2、创建如下表格 --- --- 表1 Department表的定义 --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | --- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | --- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | --- --- 表2 Teacher表的定义 --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | Number | 教工号 | int | 是 | 否 | 是 | 是 | --- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | --- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | --- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | --- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | --- | Salary | 工资 | float | 否 | 否 | 否 | 否 | --- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | --- --- 3、添加记录 --- --- | **DepNo** | **DepName** | **DepNote** | --- | --------- | ----------- | ------------------ | --- | 601 | 软件技术系 | 软件技术等专业 | --- | 602 | 网络技术系 | 多媒体技术等专业 | --- | 603 | 艺术设计系 | 广告艺术设计等专业 | --- | 604 | 管理工程系 | 连锁经营管理等专业 | --- --- | **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | --- | ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | --- | 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | --- | 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | --- | 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | --- | 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | --- | 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | --- --- -- 4、用SELECT语句查询Teacher表的所有记录。 diff --git "a/48 \351\251\254\345\256\217\350\276\276/20230302.md" "b/48 \351\251\254\345\256\217\350\276\276/20230302.md" deleted file mode 100644 index 7e7db49c1d5c9006e386d248672588f48914fd19..0000000000000000000000000000000000000000 --- "a/48 \351\251\254\345\256\217\350\276\276/20230302.md" +++ /dev/null @@ -1,89 +0,0 @@ -### 笔记 - -Avg()平均值 Sum()求和 Max()最大值 - -Min()最小值 count()统计记录器 - -count(_)统计全部,count_(字段)统计非null的值 - -关联查询 - -内连接:a inner join b on a.字段=b.字段 ab相同数据 - -左全连接:a left join b on a.字段=b.字段 where a.字段 is null 不重复的a数据 - -右全连接:a right join b on a.字段=b.字段 where b.字段 is null 不重复的b数据 - -左连接:a left join b on a.字段=b.字段 全a数据 - -右连接:a right join b on a.字段=b.字段 全b数据 - -# 作业 - ---创建添加数据顺序 1,4,2,3 - -create database glcx charset utf8; -use glcx; -create table Student( -Sno varchar (20) not null primary key, -Sname varchar (20) not null, -Ssex varchar (20) not null, -Sbirthday datetime, -Class varchar (20) -); -create table Course( -Cno varchar (20) not null primary key, -Cname varchar (20) not null, -Tno varchar (20) not null, -foreign key(Tno) references Teacher(Tno) -); -create table Score( -Sno varchar (20) not null, -foreign key(Sno) references Student(Sno), -Cno varchar (20), -foreign key(Cno) references Course(Cno), -Degree Decimal(4,1) -); -create table Teacher( -Tno varchar (20) not null primary key, -Tname varchar (20) not null, -Tsex varchar (20) not null, -Tbirthday datetime, -Prof varchar (20), -Depart varchar (20) not null -); -insert into Student values -(108,'曾华','男','1977-9-1',95033), -(105,'匡明','男','1975-10-2',95031), -(107,'王丽','女','1976-1-23',95033), -(101,'李军','男','1976-2-20',95033), -(109,'王芳','女','1975-2-10',95031), -(103,'陆君','男','1974-6-3',95031); -insert into Course VALUES -('3-105','计算机导论',825), -('3-245','操作系统',804), -('6-166','数字电路',856), -('9-888','高等数学',831); -insert into Score VALUES -(103,'3-245',86), -(105,'3-245',75), -(109,'3-245',68), -(103,'3-105',92), -(105,'3-105',88), -(109,'3-105',76), -(101,'3-105',64), -(107,'3-105',91), -(108,'3-105',78), -(101,'6-166',85), -(107,'6-166',79), -(108,'6-166',81); -insert into Teacher VALUES -(804,'李诚','男','1958-12-2','副教授','计算机系'), -(856,'张旭','男','1969-3-12','讲师','电子工程系'), -(825,'王萍','女','1972-5-5','助教',' 计算机系'), -(831,'刘冰','女','1977-8-14','助教',' 电子工程系'); --- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ -表1关联表3,表3关联表2 -select * from Student inner join Score inner join Course on -Student.Sno=Score.Sno and Score.Cno=Course.Cno; - diff --git "a/48 \351\251\254\345\256\217\350\276\276/20230309.md" "b/48 \351\251\254\345\256\217\350\276\276/20230309.md" deleted file mode 100644 index c4d29bb82322b1116ec416a5eb9fca8df5449a55..0000000000000000000000000000000000000000 --- "a/48 \351\251\254\345\256\217\350\276\276/20230309.md" +++ /dev/null @@ -1,88 +0,0 @@ -笔记 - -单列单值可以放在select、where、having后面 - -多列多值只能放在where后面,用in、not in进行比较 - -作业 - -create database lianxi charset utf8; -use lianxi; -drop table stuinfo; -drop table stuExam; -create table stuinfo( -stuNO varchar(10) primary key, -stuName varchar(10), -stuSex char, -stuage int(3), -stuAddress varchar(5), -stuSeat int(2) -); -create table stuExam( -examNO int(2) primary key, -stuNO varchar(10), -foreign key(stuNO) references stuinfo(stuNO), -writtenExam int(3), -labExam int(3) -); -create table stuMarks( -examNO int(2), -foreign key(examNO) references stuExam(examNO), -stuID varchar(10), -score int(3) -); -insert into stuinfo VALUES -('s2501','张秋利','男',20,'美国硅谷',1), -('s2502','李斯文','女',18,'湖北武汉',2), -('s2503','马文才','男',18,'湖南长沙',3), -('s2504','欧阳俊雄','女',21,'湖北武汉',4), -('s2505','梅超风','男',16,'湖北武汉',5), -('s2506','陈旋风','男',19,'美国硅谷',6); -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); -insert into stuMarks values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); --- 1.查询出年龄比班上平均年龄大的学生的信息 -select * from stuinfo where stuage>(select avg(stuage) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -select a.stuNO,stuName,stuSex,score -from stuinfo a inner join stuMarks c on -a.stuNO=c.stuID -where score in (select max(score) from stuMarks group by stuID); --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -select a.stuNO,a.stuName,a.stuSex,(writtenExam+labExam)/2 -from stuinfo a left join stuExam b ON -a.stuNO=b.stuNO -where (writtenExam+labExam)/2 in (select (writtenExam+labExam)/2 from stuExam group by examNO); --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -select * from stuinfo where stuSex='男' and stuage>=20; -select * from stuinfo -where stuSex in (select stuSex from stuinfo where stuSex='男') -and -stuage in (select stuage from stuinfo where stuage>=20); --- 5.查询出年龄比所有男生年龄都大的女生的信息 -select * from stuinfo where stuage in (select max(stuage) from stuinfo where stuSex='女' group by stuSex); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -select * from stuinfo a inner join stuExam b on -a.stuNO=b.stuNO -where b.writtenExam in (select b.writtenExam from stuExam where b.writtenExam>=60) -AND -b.labExam in (select b.labExam from stuExam where b.labExam>=60); --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select a.* from stuinfo a inner join stuExam b inner join stuMarks c ON -a.stuNO=b.stuNO and b.examNO=c.examNO -where a.stuNO in (select stuID from stuMarks group by stuID); --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select a.* from stuinfo a inner join stuExam b inner join stuMarks c ON -a.stuNO=b.stuNO and b.examNO=c.examNO -where a.stuNO not in (select stuID from stuMarks group by stuID); diff --git "a/49 \346\235\216\350\210\222\346\261\266/MySQL.md" "b/49 \346\235\216\350\210\222\346\261\266/MySQL.md" deleted file mode 100644 index 9be14a09863ae984dbbf406ce61caffba1409fc9..0000000000000000000000000000000000000000 --- "a/49 \346\235\216\350\210\222\346\261\266/MySQL.md" +++ /dev/null @@ -1,802 +0,0 @@ -* 数据库是什么?? - - 1.存储数据的地方 - - 2.DB:数据库(Database) - -* 为什么要用数据库? - - 1.因为应用程序产生的数据是在内存中的,如果程序退出或者是断电了,则数据就会消失。使用数据库是为了能够永久保存数据。当然这里指的是非内存数据库。 - - 2.用普通文件存储行不行?把数据写入到硬盘上的文件中,当然可以实现持久化的目标,但是不利于后期的检索和管理等。 - -* 数据库分类 - - * 早期:层次模型、网状模型、关系模型, - - * 随着时间的推移和市场竞争,最终,基于关系模型的关系型数据库获得了绝对市场份额。 - - * 目前市场上主要分: - - * 关系型数据库、非关系型数据库两大类 - -什么是关系型数据库和非关系数据库? - -* **关系型数据库**,采用关系模型来组织数据,简单来说,**关系模型指的就是二维表格模型**。类似于Excel工作表。 - -**非关系型数据库**,可看成传统关系型数据库的功能阉割版本,基于键值对存储数据,通过减少很少用的功能,来提高性能。 - -**MySQL的优点** - -* 可移植性:MySQL数据库几乎支持所有的操作系统 -* 免费:MySQL的社区版完全免费,一般中小型网站的开发都选择 MySQL 作为网站数据库。 -* 开源:2000 年,MySQL公布了自己的源代码,并采用GPL(GNU General Public License)许可协议,正式进入开源的世界。 -* 关系型数据库:MySQL可以利用标准SQL语法进行查询和操作。 -* 速度快、体积小、容易使用:从2009年开始,阿里的“去IOE”(去掉IBM的小型机、Oracle的数据库、EMC的存储设备)备受关注,淘宝DBA团队再次从Oracle转向MySQL,其他使用MySQL数据库的公司还有Facebook、Twitter、YouTube、百度、腾讯、去哪儿、魅族等等,自此,MySQL在市场上占据了很大的份额。 -* 安全性和连接性:所有的密码传输均采用加密形式,从而保证了密码安全。由于MySQL是网络化的,因此可以在因特网上的任何地方访问,提高数据共享的效率。 -* 丰富的接口:提供了用于C、C++、Java、PHP、Python、Ruby和Eiffel、Perl等语言的API。 -* 灵活:能够适应高要求的环境。可嵌入到应用程序中,也可以支持数据仓库、内容索引和部署软件、高可用的冗余系统、在线事务处理系统等各种应用类型。 -* MySQL最重要、最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理(Query Processing)及其他系统任务(Server Task)和数据的存储/提取相分离。这种处理和存储分离的设计可以在使用时根据性能、特性,以及其他需求来选择数据存储的方式。MySQL中同一个数据库,不同的表格可以选择不同的存储引擎。其中使用最多的是InnoDB 和MyISAM,MySQL5.5之后InnoDB是默认的存储引擎。 - -**表的关系**:表之间的关系分为一对一关系、一对多关系和多对多关系。 - -``` - -``` - -SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。 - -SQL的分类 - -| 名称 | 解释 | 命令 | -| ---------------- | ----------------------- | ---------------------------------------- | -| DDL (数据定义语言) 20% | 定义和管理数据对象结构,如数据库,数据表等 | 创建(create),修改(alter),删除(drop) show(展示)结构 | -| DML (数据操作语言) 30% | 用于操作数据库对象中所包含的数据 | 增加(insert),修改(update),删除(delete), 数据 | -| DQL (数据查询语言) 50% | 用于查询数据库数据 | 查(select) | -| DCL (数据控制语 言) | 用于管理数据库的语言,包括管理权限及数 据更改 | grant(授权),commit(确认),rollback(回滚) | - -其他语句:USE语句,SHOW语句,SET语句等。这类的官方文档中一般称为命令。 - -SQL语法规范 - -(1)mysql的sql语法不区分大小写 - -* A:数据库的表中的数据是否区分大小写。这个的话要看表格的字段的数据类型、编码方式以及校对规则 。排序 - -​ ci(大小写不敏感),cs(大小写敏感),_bin(二进制,即比较是基于字符编码的值而与language无关,区分大小写) - -* B:sql中的关键字,比如:create,insert等,不区分大小写。但是大家习惯上把关键字都“大写”。 - -(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 - -(3)建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) - -(4)数据库和表名、字段名等对象名中间不要包含空格 - -(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名 - -``` - -``` - -SQL脚本中如何加注释 - -* 单行注释:#注释内容(mysql特有的) - -* 单行注释:--空格注释内容 其中--后面的空格必须有 - -* 多行注释:/* 注释内容 */ - -mysql脚本中标点符号的要求如下: - -1. 本身成对的标点符号必须成对,例如:(),'',""。 - -2. 所有标点符号必须英文状态下半角输入方式下输入。 - -几个特殊的标点符号: - -1. 小括号(): - - * 在创建表、添加数据、函数使用、子查询、计算表达式等等会用()表示某个部分是一个整体结构。 - * 思考: 2+3 * 6 =20 和 (2+3) * 6 =30的区别 - -2. 单引号'':**字符串和日期类型的数据值使用单引号''引起来**,数值类型的不需要加标点符号。 - -3. “2023-10--10” - -4. 双引号"":列的别名可以使用引号"",**给表名取别名不要用引号**。 - -5. 在MySQL中双引号通常等价于单引号 - -6. create table tt( - - id int - ; - - ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2 - - create table temp( - - c char - - ); - insert into temp values('尚) ; #缺一半单引号 - - insert into temp values(‘尚’) ; #标点符号是中文 - - mysql> select * from student; - +------+------+ - | id | name | - +------+------+ - | 1 | 张三 | - | 2 | 李四 | - +------+------+ - 2 rows in set (0.00 sec) - - mysql> select id "学号",name "姓名" from student; - +------+------+ - | 学号 | 姓名 | - +------+------+ - | 1 | 张三 | - | 2 | 李四 | - +------+------+ - 2 rows in set (0.00 sec) - -数值类型:包括整数和小数 - -数值类型主要用来存储数字,不同的数值类型提供不同的取值范围,可以存储的值范围越大,所需要的存储空间也越大。 - -对于MySQL中的数值类型,还要做如下说明: - -* 关键字INT是INTEGER的同义词。 - -* 关键字DEC和FIXED是DECIMAL的同义词。 - - **整数类型** - - ```#演示整数类型 - #演示整数类型 - #创建一个表格,表格的名称“t_int”, - #包含两个字段i1和i2,分别是int和int(2)类型 - #create table t_int(i1 int,i2 int(2)); - create table t_int( - i1 int, - i2 int(2) #没有unsigned zerofill,(2)没有意义 - ); - - #查看当前数据库的所有表格 - show tables; - show tables from 数据库名; - - #查看表结构 - desc 表名称; - desc t_int; - - mysql> desc t_int; - +-------+------+------+-----+---------+-------+ - | Field | Type | Null | Key | Default | Extra | - +-------+------+------+-----+---------+-------+ - | i1 | int | YES | | NULL | | - | i2 | int | YES | | NULL | | - +-------+------+------+-----+---------+-------+ - 2 rows in set (0.01 sec) - - #创建一个表格,表格的名称“t_int2”, - #包含两个字段i1和i2,分别是int和int(2)类型 - create table t_int2( - i1 int, - i2 int(2) unsigned zerofill - ); - - mysql> desc t_int2; - +-------+--------------------------+------+-----+---------+-------+ - | Field | Type | Null | Key | Default | Extra | - +-------+--------------------------+------+-----+---------+-------+ - | i1 | int | YES | | NULL | | - | i2 | int(2) unsigned zerofill | YES | | NULL | | - +-------+--------------------------+------+-----+---------+-------+ - 2 rows in set (0.01 sec) - - #添加数据到表格中 - insert into 表名称 values(值列表); - insert into t_int values(1234,1234); - insert into t_int2 values(1234,1234); - - #查询数据 - select * from 表名称; - select * from t_int; - select * from t_int2; - - #添加数据到表格中 - insert into 表名称 values(值列表); - insert into t_int values(1,1); - insert into t_int2 values(1,1); - - insert into t_int values(12222228854225548778455,12222228854225548778455); - mysql> insert into t_int values(12222228854225548778455,12222228854225548778455); - ERROR 1264 (22003): Out of range value for column 'i1' at row - ``` - -**小数类型** - -MySQL中使用浮点数和定点数来表示小数。 - -浮点数有两种类型:单精度浮点数(FLOAT)和双精度浮点数(DOUBLE),定点数只有DECIMAL。浮点数和定点数都可以用(M,D)来表示。 - -* M是精度,表示该值总共显示M位,包括整数位和小数位,对于FLOAT和DOUBLE类型来说,M取值范围为0~255,而对于DECIMAL来说,M取值范围为0~65。 -* D是标度,表示小数的位数,取值范围为0~30,同时必须<=M。 - -DECIMAL实际是以字符串形式存放的,在对精度要求比较高的时候(如货币、科学数据等)使用DECIMAL类型会比较好。浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围,它的缺点是会引起精度问题。 - -``` -#演示小数类型 -#创建表格 -create table t_double( - d1 double, - d2 double(5,2) #-999.99~999.99 -); - -#查看表结构 -desc t_double; - -#添加数据 -insert into t_double values(2.5,2.5); - -#查看数据 -select * from t_double; -mysql> select * from t_double; -+------+------+ -| d1 | d2 | -+------+------+ -| 2.5 | 2.50 |#d2字段小数点后不够2位用0补充 -+------+------+ -1 row in set (0.00 sec) - -#添加数据 -insert into t_double values(2.5526,2.5526); -insert into t_double values(2.5586,2.5586); - -mysql> select * from t_double; -+--------+------+ -| d1 | d2 | -+--------+------+ -| 2.5 | 2.50 | -| 2.5526 | 2.55 |#小数点后有截断现象,并且会四舍五入 -| 2.5586 | 2.56 |#小数点后有截断现象,并且会四舍五入 -+--------+------+ -3 rows in set (0.00 sec) - - -#添加数据 -insert into t_double values(12852.5526,12852.5526); - -#d2字段整数部分超过(5-2=3)位,添加失败 -mysql> insert into t_double values(12852.5526,12852.5526); -ERROR 1264 (22003): Out of range value for column 'd2' at row 1 - - -#创建表格 -create table t_decimal( - d1 decimal, #没有指定(M,D)默认是(10,0) - d2 decimal(5,2) -); - - -#查看表结构 -desc t_decimal; -mysql> desc t_decimal; -+-------+---------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-------+---------------+------+-----+---------+-------+ -| d1 | decimal(10,0) | YES | | NULL | | -| d2 | decimal(5,2) | YES | | NULL | | -+-------+---------------+------+-----+---------+-------+ -2 rows in set (0.01 sec) - -#添加数据 -insert into t_decimal values(2.5,2.5); - -#查看数据 -select * from t_decimal; -mysql> select * from t_decimal; -+------+------+ -| d1 | d2 | -+------+------+ -| 3 | 2.50 | #d1字段小数点后截断 -+------+------+ -1 row in set (0.00 sec) - -insert into t_decimal values(12852.5526,12852.5526); - --- 把小数赋值给整数类型的字段时,会截断小数部分,考虑四舍五入 -insert into t_int2 values(1.5,1.5); -``` - -**MySQL的字符串类型有CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET等。MySQL的字符串类型可以用来存储文本字符串数据,还可以存储二进制字符串**。 - -**CHAR(M)为固定长度的字符串** - -**VARCHAR(M)为可变长度的字符串** - -```日期时间类型 - create table temp( - d1 datetime, - d2 timestamp - ); - - insert into temp values('2021-9-2 14:45:52','2021-9-2 14:45:52'); - - #修改当前的时区 - set time_zone = '+9:00'; - - insert into temp values('202192144552','202192144552'); - #ERROR 1292 (22007): Incorrect datetime value: '202192144552' for column 'd1' at row 1 - - insert into temp values('20210902144552','20210902144552'); - - insert into temp values('2021&9&2 14%45%52','2021#9#2 14@45@52'); - - create table temp( - d year - ); - - insert into temp values(2021); - insert into temp values(85); - insert into temp values(22); - insert into temp values(69); - insert into temp values(0); - insert into temp values('0'); - - mysql> select * from temp; - +------+ - | d | - +------+ - | 2021 | - | 1985 | - | 2022 | - +------+ - 3 rows in set (0.00 sec) -``` - -创建数据库 - - create database 数据库名 ; - create database 数据库名 charset 字符集; - -### 查看所有的数据库 - - show databases; #有一个s,代表多个数据库 - -### 查看某个数据库的详细定义语句 - - show create database 数据库名; - - show create database 数据库名\G - -### 修改数据库编码 - - #修改数据库字符集和校对规则 - ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称 COLLATE 字符集对应校对规则; - - ALTER DATABASE mxdx_chapter3_two CHARACTER SET utf8 COLLATE utf8_general_ci; - -==**注意,**==修改数据库编码只会影响之后创建的表的默认编码,之前创建的表不会受影响。 - -### 删除数据库 - - drop database 数据库名; - -### 使用数据库 - - use 数据库名; - -### SQL示例演示 - - #演示和数据库相关的DDL语句 - #查看当前登录用户(有权限)查看的所有的数据库 - show databases; - - #如何创建数据库 - create database 数据库名称; - - #例如,创建数据库bookstore - create database bookstore; - - #查看数据库的定义 - show create database 数据库名; - - #例如,查看bookstore数据库的定义信息 - show create database bookstore; - show create database bookstore\G - - *************************** 1. row *************************** - Database: bookstore - Create Database: CREATE DATABASE `bookstore` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ - 1 row in set (0.00 sec) - - #修改数据库的编码字符集和校对规则 - alter database 数据库名称 CHARACTER SET 字符集名称 COLLATE 校对规则 - - #修改bookstore数据库的字符集和校对规则 - alter database bookstore CHARACTER SET Latin1 COLLATE Latin1_general_ci; - #Latin1字符集不支持中文 - - mysql> show create database bookstore; - +-----------+--------------------------------------------+ - | Database | Create Database | - +-----------+----------------------------------------------------+ - | bookstore | CREATE DATABASE `bookstore` /*!40100 DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ | - +-----------+---------------------------------+ - 1 row in set (0.00 sec) - - - #使用数据库 - use 数据库名; - - #例如:使用bookstore数据库 - use bookstore; - - #创建表格 - create table temp( - s char - ); - - #添加数据 - insert into temp values('a'); - - #查询数据 - mysql> select * from temp; - +------+ - | s | - +------+ - | a | - +------+ - 1 row in set (0.00 sec) - - #添加数据 - insert into temp values('尚'); - - mysql> insert into temp values('尚'); - ERROR 1366 (HY000): Incorrect string value: '\xC9\xD0' for column 's' at row 1 - - #删除数据库 - drop database 数据库名称; - - #例如:删除bookstore数据库 - drop database bookstore; - -## 6.2 和数据表相关的 - -### 查看某个数据库的所有表格 - - use 数据库名; - show tables; - - show tables from 数据库名; - -### 创建表格 - - create table 数据表名称( - 字段名 数据类型, - 字段名 数据类型 - ... - ); - - create table teacher( - tid int, - tname varchar(5), - salary double, - weight double(5,2), - birthday date, - gender enum('男','女'), - blood enum('A','B','AB','O'), - tel char(11) - ); - -### 查看表的详细定义信息,即查看建表语句 - - show create table 表名称; - show create table 表名称\G - - mysql> show create table teacher\G - *************************** 1. row *************************** - Table: teacher - Create Table: CREATE TABLE `teacher` ( - `tid` int(11) DEFAULT NULL, - `tname` varchar(5) DEFAULT NULL, - `salary` double DEFAULT NULL, - `weight` double(5,2) DEFAULT NULL, - `birthday` date DEFAULT NULL, - `gender` enum('男','女') DEFAULT NULL, - `blood` enum('A','B','AB','O') DEFAULT NULL, - `tel` char(11) DEFAULT NULL - ) ENGINE=InnoDB DEFAULT CHARSET=utf8 - 1 row in set (0.00 sec) - -### 修改数据表编码 - - alter table 表名称 convert to character set utf8; - -### 查看表结构 - - desc 表名称; - - mysql> desc teacher; - +----------+------------------------+------+-----+---------+-------+ - | Field | Type | Null | Key | Default | Extra | - +----------+------------------------+------+-----+---------+-------+ - | tid | int(11) | YES | | NULL | | - | tname | varchar(5) | YES | | NULL | | - | salary | double | YES | | NULL | | - | weight | double(5,2) | YES | | NULL | | - | birthday | date | YES | | NULL | | - | gender | enum('男','女') | YES | | NULL | | - | blood | enum('A','B','AB','O') | YES | | NULL | | - | tel | char(11) | YES | | NULL | | - +----------+------------------------+------+-----+---------+-------+ - 8 rows in set (0.00 sec) - -### 删除表格,包括表结构和里面的数据 - - drop table 表名称; - -### 修改表结构:删除字段 - - alter table 表名称 drop 【column】 字段名称; - - alter table teacher drop column weight; - -### 修改表结构:增加字段 - - alter table 表名称 add 【column】 字段名称 数据类型; - alter table 表名称 add 【column】 字段名称 数据类型 first; - alter table 表名称 add 【column】 字段名称 数据类型 after 另一个字段; - - alter table teacher add weight double(5,2); - alter table teacher drop column weight; - - alter table teacher add weight double(5,2) first; - alter table teacher drop column weight; - - alter table teacher add weight double(5,2) after salary; - alter table teacher drop column weight; - -### 修改表结构:修改字段的数据类型 - - alter table 表名称 modify 【column】 字段名称 新的数据类型; - - mysql> desc teacher; - +----------+------------------------+------+-----+---------+-------+ - | Field | Type | Null | Key | Default | Extra | - +----------+------------------------+------+-----+---------+-------+ - | tid | int(11) | YES | | NULL | | - | tname | varchar(5) | YES | | NULL | | - | salary | double | YES | | NULL | | - | weight | double(5,2) | YES | | NULL | | - | birthday | date | YES | | NULL | | - | gender | enum('男','女') | YES | | NULL | | - | blood | enum('A','B','AB','O') | YES | | NULL | | - | tel | char(11) | YES | | NULL | | - +----------+------------------------+------+-----+---------+-------+ - 8 rows in set (0.00 sec) - - mysql> alter table teacher modify column weight double; - Query OK, 0 rows affected (0.01 sec) - Records: 0 Duplicates: 0 Warnings: 0 - - mysql> desc teacher; - +----------+------------------------+------+-----+---------+-------+ - | Field | Type | Null | Key | Default | Extra | - +----------+------------------------+------+-----+---------+-------+ - | tid | int(11) | YES | | NULL | | - | tname | varchar(5) | YES | | NULL | | - | salary | double | YES | | NULL | | - | weight | double | YES | | NULL | | - | birthday | date | YES | | NULL | | - | gender | enum('男','女') | YES | | NULL | | - | blood | enum('A','B','AB','O') | YES | | NULL | | - | tel | char(11) | YES | | NULL | | - +----------+------------------------+------+-----+---------+-------+ - 8 rows in set (0.00 sec) - -### 修改表结构:修改字段的名称 - - alter table 表名称 change 【column】 旧字段名称 新的字段名称 新的数据类型; - - mysql> desc teacher; - +----------+------------------------+------+-----+---------+-------+ - | Field | Type | Null | Key | Default | Extra | - +----------+------------------------+------+-----+---------+-------+ - | tid | int(11) | YES | | NULL | | - | tname | varchar(5) | YES | | NULL | | - | salary | double | YES | | NULL | | - | weight | double | YES | | NULL | | - | birthday | date | YES | | NULL | | - | gender | enum('男','女') | YES | | NULL | | - | blood | enum('A','B','AB','O') | YES | | NULL | | - | tel | char(11) | YES | | NULL | | - +----------+------------------------+------+-----+---------+-------+ - 8 rows in set (0.00 sec) - - mysql> alter table teacher change tel phone char(11); - Query OK, 0 rows affected (0.01 sec) - Records: 0 Duplicates: 0 Warnings: 0 - - mysql> desc teacher; - +----------+------------------------+------+-----+---------+-------+ - | Field | Type | Null | Key | Default | Extra | - +----------+------------------------+------+-----+---------+-------+ - | tid | int(11) | YES | | NULL | | - | tname | varchar(5) | YES | | NULL | | - | salary | double | YES | | NULL | | - | weight | double | YES | | NULL | | - | birthday | date | YES | | NULL | | - | gender | enum('男','女') | YES | | NULL | | - | blood | enum('A','B','AB','O') | YES | | NULL | | - | phone | char(11) | YES | | NULL | | - +----------+------------------------+------+-----+---------+-------+ - 8 rows in set (0.00 sec) - -### 修改表结构:修改字段位置 - - alter table 表名称 modify 【column】 字段名称 数据类型 first; - alter table 表名称 modify 【column】 字段名称 数据类型 after 另一个字段; - -### 修改表名称(重命名表) - - alter table 旧表名 rename 【to】 新表名; - rename table 旧表名称 to 新表名称; - -```作业练习 -作业1、创建数据库test01_market - -```mysql -CREATE DATABASE IF NOT EXISTS test01_market; -USE test01_market; -``` - -2、创建表格customers - -| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date | - -```mysql -CREATE TABLE customers( - c_num INT(11), - c_name VARCHAR(50), - c_contact VARCHAR(50), - c_city VARCHAR(50), - c_birth DATE -); -``` - -**要求3:**将c_contact字段移动到c_birth字段后面 - -```mysql -ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth; -``` - -**要求4:**将c_name字段数据类型改为 varchar(70) - -```mysql -ALTER TABLE customers MODIFY c_name VARCHAR(70); -``` - -**要求5:**将c_contact字段改名为c_phone - -```mysql -ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); -``` - -**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -```mysql -ALTER TABLE customers ADD c_gender CHAR AFTER c_name; -``` - -**要求7:**将表名改为customers_info - -```mysql -ALTER TABLE customers RENAME TO customers_info; -``` - -**要求8:**删除字段c_city - -```mysql -ALTER TABLE customers_info DROP c_city; -``` - -## 第2题 - -1、创建数据库test02_library - -```mysql -CREATE DATABASE test02_library; -USE test02_library; -``` - -2、创建表格books - -| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------- | ---- | ------------ | ---- | --- | -| b_id | 书编号 | int(11) | 否 | 是 | -| b_name | 书名 | varchar(50) | 否 | 否 | -| authors | 作者 | varchar(100) | 否 | 否 | -| price | 价格 | float | 否 | 否 | -| pubdate | 出版日期 | year | 否 | 否 | -| note | 说明 | varchar(100) | 是 | 否 | -| num | 库存 | int(11) | 否 | 否 | - -```mysql -CREATE TABLE books( - b_id INT(11) NOT NULL UNIQUE COMMENT '书编号', - b_name VARCHAR(50) NOT NULL COMMENT '书名', - `authors` VARCHAR(100) NOT NULL COMMENT '作者', - price FLOAT NOT NULL COMMENT '价格', - pubdate YEAR NOT NULL COMMENT '出版日期', - note VARCHAR(100) COMMENT '说明', - num INT(11) NOT NULL COMMENT '库存' -); -``` - -3、向books表中插入记录 - -| b_id | b_name | authors | price | pubdate | note | num | -| ---- | ------------- | --------------- | ----- | ------- | -------- | --- | -| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -1) 指定所有字段名称插入第一条记录 - -```mysql -INSERT INTO books(b_id,b_name,`authors`,price,pubdate,note,num) VALUES(1,'Tal of AAA','Dickes',23,'1995','novel',11); -``` - -2)不指定字段名称插入第二记录 - -```mysql -INSERT INTO books VALUES(2,'EmmaT','Jane lura',35,'1993','joke',22); -``` - -3)同时插入多条记录(剩下的所有记录) - -```mysql -INSERT INTO books(b_id,b_name,`authors`,price,pubdate,note,num) -VALUES(3,'Story of Jane','Jane Tim',40,'2001','novel',0), -(4,'Lovey Day','George Byron',20,'2005','novel',30), -(5,'Old land','Honore Blade',30,'2010','law',0) -(6,'The Battle','Upton Sara',30,'1999','medicine',40), -(7,'Rose Hood','Richard haggard',28,'2008','cartoon',28); -``` - -4、将小说类型(novel)的书的价格都增加5。 - -```mysql -UPDATE books set price = price+5 where note = 'novel'; -``` - -5、将名称为EmmaT的书的价格改为40。 - -```mysql -UPDATE books set price = 40 WHERE b_name = 'EmmaT'; -``` - -6、删除库存为0的记录 - -```mysql -DELETE FROM books WHERE num = 0; -``` - -``` - -``` diff --git "a/49 \346\235\216\350\210\222\346\261\266/mysql2.md" "b/49 \346\235\216\350\210\222\346\261\266/mysql2.md" deleted file mode 100644 index d0e28fa8a623ad40a57ea92e38e4c408cf9b75e7..0000000000000000000000000000000000000000 --- "a/49 \346\235\216\350\210\222\346\261\266/mysql2.md" +++ /dev/null @@ -1,417 +0,0 @@ -**笔记** - -约束,数据类型就是一种对数据的约束,not null 不能为空。 - -1,非空约束 - -not null 表示这个字段必填。 - -``` -create table test( - id int not null, -name char(5)not null, -); -``` - -2,默认约束 - -default,当你不给值时,系统会自动以默认值填充。 - -``` -create table test( - id int not null, -name char(5)not null default'名字'', -); -``` - -3,主键约束 - -primary key, 非空,唯一,同一个表中,只能有一个主键。 - -``` -CREATE TABLE teacher( - tid INT PRIMARY KEY, - tname VARCHAR(20) -); - -只有一个主键: -若执行 -tid INT PRIMARY KEY, -tname VARCHAR(20) PRIMARY KEY, -错误代码: 1068 -Multiple(重复的,多倍的) primary key defined(定义) - -不为null: -若执行(INSERT INTO teacher VALUES(NULL,'王');) -错误代码: 1048 -Column 'tid' cannot be null -主键不允许为null - -不重复: -若执行两遍相同的insert语句(INSERT INTO teacher VALUES(1,'柴');),就会报错 -错误代码: 1062 -Duplicate(重复的) entry(输入) '1' -for key 'teacher.PRIMARY' -意思:违反了主键约束 -``` - -4,唯一约束 - -(1)关键字:unique key (2)特点 A:允许为null,但是不能重复 B:一个表可以有多个唯一键约束建表后增加唯一键约束 - -``` -ALTER TABLE 表名称 ADD UNIQUE KEY (字段列表); - -示例: -ALTER TABLE student ADD UNIQUE KEY(snam - -e): -``` - -5,自增约束 - -维护某个字段的值自动增长的一个属性。 它的要求: (1)一个表最多只能有一个字段是自增的 (2)自增的字段必须是整数类型 (3)自增的字段必须是键约束的字段(通常是主键、唯一键) - -自增字段赋值为null和0的时候,会自增,如果赋值为其他的值,按照你指定的值来。 - -``` -CREATE TABLE stu( - sid INT AUTO_INCREMENT PRIMARY KEY, - sname VARCHAR(20) -); -ALTER TABLE 表名称 AUTO_INCREMENT = 起始值; - -示例: -ALTER TABLE stu AUTO_INCREMENT = 1001; -``` - - - -作业 -== - -第1题 ------------------------------------------------------------------------------------------------------------------------------------------------- - -1、创建数据库test01_company - -CREATE DATABASE test01_company CHARSET utf8; -USE test01_company; - -2、创建表格offices - -| 字段名 | 数据类型 | -| ---------- | ----------- | -| officeCode | int | -| city | varchar(30) | -| address | varchar(50) | -| country | varchar(50) | -| postalCode | varchar(25) | - -CREATE TABLE offices( - officeCode INT, - city VARCHAR(30), - address VARCHAR(50), - country VARCHAR(50), - postalCode VARCHAR(25) -); - -3、创建表格employees - -| 字段名 | 数据类型 | -| --------- | ------------ | -| empNum | int(11) | -| lastName | varchar(50) | -| firstName | varchar(50) | -| mobile | varchar(25) | -| code | int | -| jobTitle | varchar(50) | -| birth | date | -| Note | varchar(255) | -| Sex | varchar(5) | - -CREATE TABLE employees( - empNum INT(11), - lastName VARCHAR(50), - firstName VARCHAR(50), - mobile VARCHAR(25), - `code` INT, - jobTitle VARCHAR(50), - birth date, - Note VARCHAR(255), - Sex VARCHAR(5) -); - -**要求4:**将表employees的mobile字段修改到code字段后面。 - -ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER `code`; - -**要求5:**将表employees的birth字段改名为birthday; - -ALTER TABLE employees CHANGE birth birthday DATE; - -**要求6:**修改sex字段,数据类型为char(1) - -ALTER TABLE employees MODIFY sex CHAR(1); - -**要求7:**删除字段note; - -ALTER TABLE employees DROP note; - -**要求8:**增加字段名favoriate_activity,数据类型为varchar(100); - -ALTER TABLE employees ADD favoriate_activity VARCHAR(100); - -**要求9:**将表employees的名称修改为 employees_info - -ALTER TABLE employees RENAME employees_info; - -第2题 ------------------------------------------------------------------------------------------------------------------------------------------------- - -1、创建数据库test02db - -CREATE DATABASE test02db CHARSET utf8; -USE test02db; - -2、创建表格pet - -| 字段名 | 字段说明 | 数据类型 | -| ------- | ---- | ----------- | -| name | 宠物名称 | varchar(20) | -| owner | 宠物主人 | varchar(20) | -| species | 种类 | varchar(20) | -| sex | 性别 | char(1) | -| birth | 出生日期 | year | -| death | 死亡日期 | year | - -CREATE TABLE pet( - `name` VARCHAR(20) COMMENT '宠物名称', - `owner` VARCHAR(20) COMMENT '宠物主人', - species VARCHAR(20) COMMENT '种类', - sex CHAR(1) COMMENT '性别', - birth year COMMENT '出生日期', - death year COMMENT '死亡日期' -); - -3、添加记录 - -| name | owner | species | sex | birth | death | -| ------ | ------ | ------- | --- | ----- | ----- | -| Fluffy | harold | Cat | f | 2003 | 2010 | -| Claws | gwen | Cat | m | 2004 | | -| Buffy | | Dog | f | 2009 | | -| Fang | benny | Dog | m | 2000 | | -| bowser | diane | Dog | m | 2003 | 2009 | -| Chirpy | | Bird | f | 2008 | | - -INSERT INTO pet -VALUES - ('Fluffy','harold','Cat','f','2003','2010'), - ('Claws','gwen','Cat','m','2004',NULL), - ('Butty',NULL,'Dog','f','2009',NULL), - ('Fang','benny','Dog','m','2000',NULL), - ('bowser','diane','Dog','m','2003','2009'), - ('Chirpy',NULL,'Bird','f','2008',NULL); - -4、 添加字段主人的生日owner_birth。 - -ALTER TABLE pet ADD owner_birth date; - -5、 将名称为Claws的猫的主人改为kevin - -UPDATE pet SET `owner` = 'kevin' WHERE `name` = 'Claws'; - -6、 将没有死的狗的主人改为duck - -UPDATE pet SET `owner` = 'duck' WHERE species = 'Dog' AND death IS NULL; - -7、 查询没有主人的宠物的名字; - -SELECT `name` FROM pet WHERE `owner` IS NULL; - -8、 查询已经死了的cat的姓名,主人,以及去世时间; - -SELECT `name`, `owner`, death FROM pet WHERE species='Cat' AND death IS NOT NULL; - -9、 删除已经死亡的狗 - -DELETE FROM pet WHERE death is not null and species = 'Dog'; - -10、查询所有宠物信息 - -SELECT * FROM pet; - -第3题 ------------------------------------------------------------------------------------------------------------------------------------------------- - -1、创建数据库:test03_company - -CREATE DATABASE test03_company CHARSET utf8; -USE test03_company; - -2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - -A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - -CREATE TABLE department( - depid VARCHAR(5) NOT NULL PRIMARY KEY, - depname VARCHAR(5) NOT NULL, - deinfo VARCHAR(30) -); - -B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - -* ​ 雇员编号为主键; -* ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); -* ​ 性别默认为男; - -CREATE TABLE employee ( - empid VARCHAR(5) NOT NULL PRIMARY KEY, - `name` VARCHAR(5) NOT NULL, - sex VARCHAR(1) NOT NULL DEFAULT '男', - title VARCHAR(10), - birthday date NOT NULL, - depid VARCHAR(5), - FOREIGN KEY(depid) REFERENCES department(depid) ON UPDATE CASCADE ON DELETE SET NULL -); - -C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - -3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) - -CREATE TABLE salary( - empid VARCHAR(5) PRIMARY KEY, - basesalary INT, - titlesalary INT, - deduction INT -); -ALTER TABLE salary MODIFY empid VARCHAR(5); -ALTER TABLE salary ADD FOREIGN KEY(empid) REFERENCES employee(empid) ON UPDATE CASCADE ON DELETE CASCADE; - -4、添加数据如下: - -部门表: - -| 部门编号 | 部门名称 | 部门简介 | -| ---- | ---- | ------ | -| 111 | 生产部 | Null | -| 222 | 销售部 | Null | -| 333 | 人事部 | 人力资源管理 | - -INSERT INTO department -VALUES -(111,'生产部',NULL), -(222,'销售部',NULL), -(333,'人事部','人力资源管理'); - -雇员表: - -| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | -| ---- | --- | --- | ----- | ---------- | ------ | -| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | -| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | -| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | -| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | - -INSERT INTO employee VALUES -(1001,'张三','男','高级工程师','1975-1-1',111), -(1002,'李四','女','助工','1985-1-1',111), -(1003,'王五','男','工程师','1978-11-11',222), -(1004,'张六','男','工程师','1999-1-1',222); - -工资表: - -| 雇员编号 | 基本工资 | 职务工资 | 扣除 | -| ---- | ---- | ---- | ---- | -| 1001 | 2200 | 1100 | 200 | -| 1002 | 1200 | 200 | NULL | -| 1003 | 2900 | 700 | 200 | -| 1004 | 1950 | 700 | 150 | - -INSERT INTO salary VALUES -(1001,2200,1100,200), -(1002,1200,200,NULL), -(1003,2900,700,200), -(1004,1950,700,150); - -第4题 ------------------------------------------------------------------------------------------------------------------------------------------------- - -1、创建一个数据库:test04_school - -CREATE DATABASE test04_school CHARSET utf8; -USE test04_school; - -2、创建如下表格 - -表1 Department表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ------- | -------- | ----------- | ------ | ------ | ------ | ------ | -| DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | -| DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | -| DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | - -CREATE TABLE Department( - DepNo INT(10) UNIQUE PRIMARY KEY COMMENT '部门号', - DepName VARCHAR(20) COMMENT '部门名称', - DepNote VARCHAR(50) NOT NULL COMMENT '部门备注' -); - -表2 Teacher表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ------- | -------- | ------------ | ------ | ------ | ------ | ------ | -| Number | 教工号 | int | 是 | 否 | 是 | 是 | -| Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | -| Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | -| Birth | 出生日期 | date | 否 | 否 | 否 | 否 | -| DepNo | 部门号 | int | 否 | 是 | 否 | 否 | -| Salary | 工资 | float | 否 | 否 | 否 | 否 | -| Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | - -CREATE TABLE Teacher( - Number INT UNIQUE PRIMARY KEY COMMENT '教工号', - `Name` VARCHAR(30) COMMENT '姓名', - Sex VARCHAR(4) NOT NULL COMMENT '性别', - Birth date NOT NULL COMMENT '出生日期', - DepNo INT NOT NULL COMMENT '部门号', - Salary FLOAT NOT NULL COMMENT '工资', - Address VARCHAR(100) NOT NULL COMMENT '家庭住址', - FOREIGN KEY(DepNo) REFERENCES Department(DepNo) -); - -3、添加记录 - -| **DepNo** | **DepName** | **DepNote** | -| --------- | ----------- | ----------- | -| 601 | 软件技术系 | 软件技术等专业 | -| 602 | 网络技术系 | 多媒体技术等专业 | -| 603 | 艺术设计系 | 广告艺术设计等专业 | -| 604 | 管理工程系 | 连锁经营管理等专业 | - -INSERT INTO Department VALUES -(601,'软件设计系','软件技术等专业'), -(602,'网络技术系','多媒体技术等专业'), -(603,'艺术设计系','广告艺术设计等专业'), -(604,'管理工程系','连锁经营管理等专业'); - -| **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | -| ---------- | -------- | ------- | ---------- | --------- | ---------- | ----------- | -| 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | -| 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | -| 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | -| 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | -| 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | - -INSERT INTO Teacher VALUES -(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'), -(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'), -(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'), -(2004,'James','女','1980-10-20',602,3500,'四川省成都市'), -(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); - -4、用SELECT语句查询Teacher表的所有记录。 - -SELECT * FROM Teacher; diff --git "a/49 \346\235\216\350\210\222\346\261\266/\345\255\220\346\237\245\350\257\242.md" "b/49 \346\235\216\350\210\222\346\261\266/\345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index 24230c1df35d8bc34a5b8a2b1208ddbf7fb6fb44..0000000000000000000000000000000000000000 --- "a/49 \346\235\216\350\210\222\346\261\266/\345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,111 +0,0 @@ -什么是子查询? - -1, 嵌套在其他SQL语句中的查询语句 - -2,子查询通常先运行,所以要用()包含起来。 - -3,子查询的运行结果,可以作为其他语句的条件数据源等。 - -``` -select 1 from 3 where 2 ; -``` - -where是不能用别名和聚合函数having才支持别名和聚合函数。 - -ABSI(x)返回X的绝对值。 - -总结 - -只查询的结果形式: - -1,单列单个值放在select后面where后面having后面。 - -2,单列多个值只能放where后面,用in,not,in这种表达式,或者比较运算符,可以用=,>,<,>=,!=,搭配any,all,等关键字子查询结果进行比较。 - -有join就要有on - -聚合函数是对多行数据的运算。 - -group by一般要结合聚合函数使用。 - -放在from后面,子查询当作一个临时表使用,必须要用别名。 - -子查询的结果是单列:可以放在select参与运算,或是作为字段,也可以放在where/having后面当条件,如果是多列,多个值,只能放在from后面当一个临时表使用,并且必须要给这个表取别名。 - - - -##作业 - - -- 创建数据库 - - create database abcd charset utf8; - - -- 使用数据库 - - use abct; - - -- 创建表格 - - create table stuinfo( - stuno varchar(10) primary key, - stuname varchar(10), - stusex char, - stuage int, - stuaddress varchar(10), - stuseat int - ); - create table stuexam( - examno int primary key, - stuno varchar(10), - writtenexam int, - labexam int, - foreign key (stuno) references stuinfo(stuno) - ); - create table stumarks( - examno int, - stuid varchar(10), - score int, - foreign key (examno) references stuexam(examno), - foreign key (stuid) references stuinfo(stuno) - ); - - -- 插入数据表格 - insert into stuinfo values ('s2501','张秋利','男',20,'美国硅谷',1),('s2502','李斯文','女',18,'湖北武汉',2),('s2503','马文才','男',18,'湖南长沙',3),('s2504','欧阳俊雄','女',21,'湖北武汉',4),('s2505','梅超风','男',16,'湖北武汉',5),('s2506','陈旋风','男',19,'美国硅谷',6); - 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); - insert into stumarks values (1,'s2501',88),(2,'s2501',92),(3,'s2501',53),(4,'s2502',60),(5,'s2502',99),(6,'s2503',82); - - -- 在如图的数据表上完成以下题目 - -- - -- 1.查询出年龄比班上平均年龄大的学生的信息 - select * from stuinfo where stuage > (select avg(stuage) from stuinfo); - -- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) - select a.stuno,a.stuname,a.stusex,c.`选修课最高分` from stuinfo a right join stumarks b on a.stuno = b.stuid right join (select examno,max(score) 选修课最高分 from stumarks group by stuid) c on b.examno = c.examno; - -- -- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) - select a.stuno,stuname,stusex,((b.writtenexam+labexam)/2) 考试平均分 from stuinfo a left join stuexam b on a.stuno = b.stuno; - -- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) - -- (1) - select * from stuinfo where stusex = '男' and stuage >=20; - -- (2) - select * from stuinfo where stuage = (select stuage from stuinfo where stuage >= 20 and stusex = '男'); - -- 5.查询出年龄比所有男生年龄都大的女生的信息 - select * from stuinfo where stusex = '女' and stuage = (select max(stuage) from stuinfo); - -- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) - select distinct a.stuno,a.stuname,a.stusex,a.stuage,a.stuaddress,a.stuseat from stuinfo a right join stumarks b on a.stuno = b.stuid where b.score >= 60 ; - -- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - select distinct * from stuinfo a left join stumarks b on a.stuno = b.stuid where b.score is not null; - -- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - select distinct * from stuinfo a left join stumarks b on a.stuno = b.stuid where b.score is null; - -- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) - select a.stuno,a.stuname,a.stusex,a.stuage,a.stuaddress,a.stuseat from stuinfo a left join stuexam b on a.stuno = b.stuno where b.writtenexam >= 90 or b.labexam >=90; - -- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) - select a.stuno,a.stuname,a.stusex,a.stuage,a.stuaddress,a.stuseat,((b.writtenexam + b.labexam)/2) 平均成绩 from stuinfo a left join stuexam b on a.stuno = b.stuno where ((b.writtenexam + b.labexam)/2) > 80; - -- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) - select a.stuno,a.stuname,a.stusex,a.stuage,a.stuaddress,a.stuseat from stuinfo a left join stuexam b on a.stuno = b.stuno where b.writtenexam > (select writtenexam from stuexam where stuno = 's2501') and b.labexam > (select labexam from stuexam where stuno = 's2501'); - -- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) - select a.stuno,a.stuname,a.stusex,a.stuage,a.stuaddress,a.stuseat from stuinfo a left join stuexam b on a.stuno = b.stuno where b.writtenexam > (select writtenexam from stuexam where stuno = 's2501') or b.labexam > (select labexam from stuexam where stuno = 's2501'); - - -- 13.查询班上比所有男生年龄都要大的女生的信息 - select * from stuinfo where stusex = '女' and stuage = (select max(stuage) from stuinfo); - -- - -- 14.查询出只要比某个男生年龄大的女生的信息 - select * from stuinfo where stusex = '女' and stuage > (select min(stuage) from stuinfo where stusex = '男'); diff --git "a/5 \350\260\242\351\223\226\346\265\251/20230220 \346\225\260\346\215\256\345\272\223.md" "b/5 \350\260\242\351\223\226\346\265\251/20230220 \346\225\260\346\215\256\345\272\223.md" deleted file mode 100644 index 827552d80ec2afd707fb5f54c3a562162284d26d..0000000000000000000000000000000000000000 --- "a/5 \350\260\242\351\223\226\346\265\251/20230220 \346\225\260\346\215\256\345\272\223.md" +++ /dev/null @@ -1,67 +0,0 @@ -# 笔记 - -使用cmd命令连接: -mysql -h主机名 -p端口号 -u用户名 -p密码 -例如:mysql -h localhost -p 3306 -u root -proot(不能有空格) -如果是连本机:-h localhost可以省略,端口号未修改: -p3306可以省略 简写成:mysql -u root -p -查看所有的数据库: show databases; -创建自己的数据库: create database 数据库名;例如:creat database mxdx; -删除数据库:drop database 数据库名;例如:drop database mxdx; -使用自己的数据库: use 数据库名; -查看某个库的所有表格:show tables from 数据库名; -创建新的表格:create table 表名称( 例如: create table taobao( -字段名 数据类型, id int, -字段名 数据类型 name varchar(10)长度 -); ); -查看已定义的表结构:dese 表名称; -添加一条记录:insert into 表名称 values(值列表); -例如:insert into taobao values(1,‘张三’); -查看一个表的数据:select from 表名称; -删除表:drop table 表名称; -char(M)为固定长度的字符串,默认存储1个字符。(数据类型) -例如:create table temp( char最大是255 -c1 char, -c2 char(3) -); -insert into temp values('桃花岛',‘桃花岛’);#失败 -insert into temp values(’男‘,’桃花岛‘);#成功 -varchar(M)为可变长度的字符串,M不可缺省必须指定M -unsigned 声明该数列不允许负数 -zerofill 不足为数用0来填充 -double 双精度 int 整数 decimal 小数位 float 单精度 -decimal 定点数 默认是(10,0)四舍五入时5就是5 -double和float四舍五入时5是无限接近于5 -float(M,N)M表示限制整数+小数一共只能存放M位长度,如果小数部分长度超过N,自动四舍五入。 -时间类型:date年月日 time时分秒 year年份 datetime日期时间 -enum枚举类型,类似单选框中的选项,只能选一个 -set 集合,类似的选框,可以不选也可以多选 -if not exists 如果不存在 -例如:create database if not existe class2 charset utf8; -if existe 如果存在 -例如:drop database if existe class2; -修改数据库的编码:alter database 数据库名 character set 新的数据库名; -增加一个表字段 -alter table 表名称 add 字段名 数据类型; -删除一个字段 -alter table 表名称 change 旧字段名称 新字段名称 数据类型; -修改一个字段的数据类型 -alter table 表名称 modify 字段名称 新数据类型; -修改字段的位置顺序 -alter table 表名称 modify 字段名称 数据类型 after 另一个字段; -重命名表 -alter table 表名称 rename to 新名称; -添加语句,可以指定部分字段赋值 -insert into 表名称(字段列表) values(值列表); -删除部分行 -delete from 表名称 where 条件; -例如:delete from stu where sid=777; -删除列的数据 -update 表名称 set 列名称=null; -删除列的定义 -alter table 表名称 drop 列名称 - -# 作业 - -CREATE DATABASE test01_market use test01_market CREATE TABLE customers( c_num int(11), c_name varchar(50), c_contact varchar(50), c_city varchar(50), c_birth date ); -- 要求3:将c_contact字段移动到c_birth字段后面 alter table customers MODIFY c_contact VARCHAR(50) AFTER c_birth; -- 要求4:将c_name字段数据类型改为 varchar(70) ALTER TABLE customers MODIFY c_name varchar(70); -- 要求5:将c_contact字段改名为c_phone ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); -- 要求6:增加c_gender字段到c_name后面,数据类型为char(1) ALTER TABLE customers ADD c_gender char(1) AFTER c_name; -- 要求7:将表名改为customers_info ALTER TABLE customers RENAME TO customers_info; -- 要求8:删除字段c_city ALTER TABLE customers_info DROP c_city; -CREATE DATABASE test02_library use test02_library CREATE TABLE books( b_id INT(11) NOT NULL UNIQUE, b_name VARCHAR(50) NOT NULL, authors VARCHAR(100) NOT NULL, price FLOAT NOT NULL, pubdate year NOT NULL, note VARCHAR(100) NULL, num int(11) NOT NULL ); INSERT INTO books (b_id,b_name,authors,price,pubdate,note,num) VALUES (1,'talofaaa','dickes',23,'1995','novel',11); INSERT INTO books VALUES(2,'EmmaT','Jane lura',35,'1993','joke',22); INSERT INTO books VALUES(3,'Story of Jane','Jane Tim',40,'2001','novel',0); INSERT INTO books VALUES(4,'Lovey Day','George Byron',20,'2005','novel',30); INSERT INTO books VALUES(5,'Old land','Honore Blade',30,'2010','law',0); INSERT INTO books VALUES(6,'The Battle','Upton Sara',30,'1999','medicine',40); INSERT INTO books VALUES(7,'Rose Hood','Richard haggard',28,'2008','cartoon',28); UPDATE books set price=price+5 WHERE note='novel'; UPDATE books SET price=40 WHERE b_name='EmmaT'; DELETE from books where num=0; -CREATE DATABASE test03_bookstore use test03_bookstore CREATE TABLE book( id int(11) NO NULL, title varchar(100) NO NULL, author varchar(100) NO NULL, price double(11,2) NO NULL, sales int(11) NO NULL, stockint(11) NO NULL, img_path varchar(100) NO NULL ); INSERT INTO book VALUES (1,'解忧杂货店','东野圭吾',27.2,102,98,'upload/books/解忧杂货店.jpg'),(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg') CREATE TABLE users( id int(11) uner \ No newline at end of file diff --git "a/50 \345\274\240\350\265\267\347\221\236/20230220 MySQL\344\271\240\351\242\230\345\217\212\345\237\272\347\241\200\347\254\224\350\256\260.md" "b/50 \345\274\240\350\265\267\347\221\236/20230220 MySQL\344\271\240\351\242\230\345\217\212\345\237\272\347\241\200\347\254\224\350\256\260.md" deleted file mode 100644 index 391e46c34526b27b3ed65aa3aa40a349b2f5352d..0000000000000000000000000000000000000000 --- "a/50 \345\274\240\350\265\267\347\221\236/20230220 MySQL\344\271\240\351\242\230\345\217\212\345\237\272\347\241\200\347\254\224\350\256\260.md" +++ /dev/null @@ -1,285 +0,0 @@ -### 数据库: - -##### mysql脚本中的标点符号; - - mysql脚本中标点符号的要求如下: - -1. 本身成对的标点符号必须成对,例如:(),'',""。 - -2. 所有标点符号必须英文状态下半角输入方式下输入。 - - 几个特殊的标点符号: - -3. 小括号(): - - * 在创建表、添加数据、函数使用、子查询、计算表达式等等会用()表示某个部分是一个整体结构。 - * 思考: 2+3 * 6 =20 和 (2+3) * 6 =30的区别 - -4. 单引号'':**字符串和日期类型的数据值使用单引号''引起来**,数值类型的不需要加标点符号。 - -5. “2023-10--10” - -6. 双引号"":列的别名可以使用引号"",**给表名取别名不要用引号**。 - -7. 在MySQL中双引号通常等价于单引号 - -  mysql语句格式: - -  1.#演示整数类型 - -      #创建一个表格,表格的名称“t_int”, - -      #包含两个字段i1和i2,分别是int和int(2)类型 - -```mysql - #create table t_int(i1 int,i2 int(2)); - create table t_int( - i1 int, - i2 int(2) #没有unsigned zerofill,(2)没有意义 - ); -``` - -2.#查看当前数据库的所有表格 - -```mysql -show tables; - show tables from 数据库名; -``` - -3.#查看表结构 - -```mysql -desc 表名称; - desc t_int; -``` - -4.#添加数据到表格中 - -```mysql -insert into 表名称 values(值列表); - insert into t_int values(1,1); - insert into t_int2 values(1,1); -``` - -5.#查询数据 - -```mysql -select * from 表名称; - select * from t_int; - select * from t_int2; -``` - -### sql语法规范: - -(1)mysql的sql语法不区分大小写 - -* A:数据库的表中的数据是否区分大小写。这个的话要看表格的字段的数据类型、编码方式以及校对规则 。排序 - -​ ci(大小写不敏感),cs(大小写敏感),_bin(二进制,即比较是基于字符编码的值而与language无关,区分大小写) - -* B:sql中的关键字,比如:create,insert等,不区分大小写。但是大家习惯上把关键字都“大写”。 - -(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号 - -(3)建议不要使用mysql的关键字等来作为**表名、字段名、数据库**名等,如果不小心使用,请在SQL语句中使用`(飘号/反引 号)引起来,说明 : 反引号用于区别MySQL保留字与普通字符而引入的 (键盘esc下面的键) - - (4)数据库和表名、字段名等对象名中间不要包含空格 - - (5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名 - -## - -# 作业: - -###### 第一题: - -1、创建数据库test01_market - -```mysql -CREATE DATABASE IF NOT EXISTS test01_market; -USE test01_market; -``` - -2.创建表格customers - -```mysql -CREATE TABLE customers( - c_num INT(11), - c_name VARCHAR(50), - c_contact VARCHAR(50), - c_city VARCHAR(50), - c_birth DATE -); -``` - -3:将c_contact字段移动到c_birth字段后面 - -```mysql -ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth; -``` - -4.将c_name字段数据类型改为 varchar(70) - -```mysql -ALTER TABLE customers MODIFY c_name VARCHAR(70); -``` - -5.将c_contact字段改名为c_phone - -```mysql -ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); -``` - -6.增加c_gender字段到c_name后面,数据类型为char(1) - -```mysql -ALTER TABLE customers ADD c_gender CHAR AFTER c_name; -``` - -7.将表名改为customers_info - -```mysql -ALTER TABLE customers RENAME TO customers_info; -``` - -8.删除字段c_city - -```mysql -ALTER TABLE customers_info DROP c_city; -``` - -##### 第二题: - -1、创建数据库test02_library - -```mysql -CREATE DATABASE test02_library; -USE test02_library; -``` - -2、创建表格books - -```mysql -CREATE TABLE books( -b_id int(11), -b_name varchar(50), -`authors` VARCHAR(100), -price FLOAT, -pubdate YEAR, -note VARCHAR(100), -num INT(11) -); -``` - -3、向books表中插入记录 - -1) 指定所有字段名称插入第一条记录 - -```mysql -INSERT INTO books(b_id,b_name,`authors`,price,pubdate,note,num) VALUES(1,'Tal of AAA','Dickes',23,'1995','novel',11); -``` - -2)不指定字段名称插入第二记录 - -```mysql -NSERT INTO books VALUES(2,'EmmaT','Jane lura',35,'1993','joke',22); -``` - -3)同时插入多条记录(剩下的所有记录) - -```mysql -INSERT INTO books(b_id,b_name,`authors`,price,pubdate,note,num) -VALUES(3,'Story of Jane','Jane Tim',40,'2001','novel',0), -(4,'Lovey Day','George Byron',20,'2005','novel',30), -(5,'Old land','Honore Blade',30,'2010','law',0), -(6,'The Battle','Upton Sara',30,'1999','medicine',40), -(7,'Rose Hood','Richard haggard',28,'2008','cartoon',28); -``` - -4、将小说类型(novel)的书的价格都增加5。 - -```mysql -UPDATE books set price = price+5 where note = 'novel'; -``` - -5、将名称为EmmaT的书的价格改为40 - -```mysql -UPDATE books set price = 40 WHERE b_name = 'EmmaT'; -``` - -6、删除库存为0的记录 - -```mysql -DELETE FROM books WHERE num = 0; -``` - -##### 第三题: - -1、创建数据库test03_bookstore - -```mysql -CREATE DATABASE test03_bookstore; -USE test03_bookstore; -``` - -2、创建book表 - -```mysql -CREATE TABLE book( - id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, - title VARCHAR(100) NOT NULL, - author VARCHAR(100) NOT NULL, - price DOUBLE(11,2) NOT NULL, - sales INT(11) NOT NULL, - stock INT(11) NOT NULL, - img_path VARCHAR(100) NOT NULL -); -``` - -3.创建用户表users,并插入数据 - -```mysql -CREATE TABLE users( - id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, - username VARCHAR(100) NOT NULL UNIQUE KEY, - `password` VARCHAR(100) NOT NULL , - email VARCHAR(100) -); -``` - -4.创建订单表orders - -```mysql -CREATE TABLE orders( - id VARCHAR(100) NOT NULL PRIMARY KEY, - order_time DATETIME NOT NULL, - total_count INT(11) NOT NULL, - total_amount DOUBLE(11,2) NOT NULL, - state INT(11) NOT NULL, - user_id INT(11) NOT NULL -); -ALTER TABLE orders ADD INDEX(user_id); -INSERT INTO orders VALUES('15294258455691','2018-06-20 00:30:45',2,50.20,0,1); -``` - -5.创建订单明细表order_items - -```mysql -CREATE TABLE order_items( - id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, - count INT(11) NOT NULL, - amount DOUBLE(11,2) NOT NULL, - title VARCHAR(100) NOT NULL, - `author` VARCHAR(100) NOT NULL, - price DOUBLE(11,2) NOT NULL, - img_path VARCHAR(100) NOT NULL, - order_id VARCHAR(100) NOT NULL -); -ALTER TABLE order_items ADD INDEX(order_id); -ALTER TABLE order_items CONVERT TO CHARACTER SET utf8; -INSERT INTO order_items -VALUES -(1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg','15294258455691'), -(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg','15294258455691'); -``` diff --git "a/50 \345\274\240\350\265\267\347\221\236/20230222 MySQL\347\272\246\346\235\237.md" "b/50 \345\274\240\350\265\267\347\221\236/20230222 MySQL\347\272\246\346\235\237.md" deleted file mode 100644 index ef21e33413b272c809f1269ebda972d7fa803553..0000000000000000000000000000000000000000 --- "a/50 \345\274\240\350\265\267\347\221\236/20230222 MySQL\347\272\246\346\235\237.md" +++ /dev/null @@ -1,368 +0,0 @@ -## MySQL约束 - -约束:主键、唯一、非空、默认、自增、外键 - -#### 主键约束 - -1. 关键字是primary key -2. 特点:每一个表当中只能有一个主键约束 -3. 主键约束的字段值不允许为null值 -4. 不允许重复 - -解决方法.1:单独使用一个id列当主键 - -解决方法2:复合主键 - -```mysql -create table xuanke( - sid int, - cid int, - score int, - primary key(sid,cid) #它俩组合不能为 null ,并且唯一 -); -``` - -建表后增加约束 - -```mysql -alter table 表名称 add primary key(字段列表); -``` - -如果是一个字段,就是一个字段是主键 (字段列表)如果是多个字段,就是复合主键 - -如果想要删除主键约束 - -```mysql -alter table 表名称 drop primary key; -alter table student dtop primary key; -``` - -#### 唯一键约束 - -1. 关键字:unique key -2. 特点:允许为null -3. 不能重复 -4. 一个表可以有多个唯一键约束 - -建表后增加唯一键约束 - -```mysql -alter table 表名称 add unique key (字段列表); -alter table student add unique key (sname); -``` - -如果用语句删除唯一键约束 - -```mysql -alter table 表名称 drop index 索引名; -``` - -#### 非空约束 - -```mysql -not null # 不允许为空 -``` - -#### 默认值约束 - -如果某个字段,在添加数据时未指定值时,希望不要用null处理而是按照一个默认值处理,就可以使用默认值约束 - -```mysql -default -``` - -删除score的非空约束 - -```mysql -alter table student modify score int; -``` - -增加非空约束 - -```mysql -alter table student modify score int not null; -``` - -删除gender的默认值约束 保留非空约束 - -```mysql -alter table student modify gender enum('男','女') not null; -``` - -#### 检查约束 - -MySQL5.7不支持check约束,在MySQL中开始支持check约束 - -#### 外键约束 - -约束俩个表的关系,或者是一个表的俩个字段之间的关系 - -(1)主表(父表)和从表(子表) 主表:被依赖,被参考 从表:依赖别人的,参考别人的 - -例如:学生表、课程表、选课表 选课表中的学号,它的值是依赖于学生表的学号。 选课表是从表, 学生表是主表。 选课表中的课程编号,它的值是依赖于课程表的课程编号。 选课表是从表, 课程表示主表。 - -(2)外键的建立和指定要在从表中定义 (3)关键字 foreign key (4)格式 - -```mysql -foreign key (从表的字段) references 主表(被依赖字段[主键]) -``` - -(5)要求 A:主表必须先存在 B:主表被依赖字段必须有索引,所以通常是主键列或唯一键列等才能作为被依赖字段。 C:删除表时,要么先删除从表,再删除主表,要么先解除外键约束,然后各自删除。 D:从(子)表的依赖字段的数据,必须在主(父)表被依赖字段中选择。 添加和修改都是这样的。 E:主(父)表被依赖字段的数据不能轻易的删除和修改,要看是否被引用 - -```my -外键约束等级为 on update/delete cascade /(set null) -``` - -7、自增属性 维护某个字段的值自动增长的一个属性。 它的要求: (1)一个表最多只能有一个字段是自增的 (2)自增的字段必须是整数类型 (3)自增的字段必须是键约束的字段(通常是主键、唯一键) - -自增字段赋值为null和0的时候,会自增, 如果赋值为其他的值,按照你指定的值来。 - -```mysql -ALTER TABLE 表名称 AUTO_INCREMENT = 起始值; - -``` - ---- - -## 作业 - -### 第一题 - -```mysql - --- 1、创建数据库test01_company --- -CREATE DATABASE test01_company CHARSET utf8; -use test01_company; --- 2、创建表格offices - --- | 字段名 | 数据类型 | --- | ---------- | ----------- | --- | officeCode | int | --- | city | varchar(30) | --- | address | varchar(50) | --- | country | varchar(50) | --- | postalCode | varchar(25) | -CREATE TABLE offices( -officecode int, -city VARCHAR(30), -address varchar(50), -country VARCHAR(50), -postalcode VARCHAR(25)); --- 3、创建表格employees --- --- | 字段名 | 数据类型 | --- | --------- | ------------- | --- | empNum | int(11) | --- | lastName | varchar(50) | --- | firstName | varchar(50) | --- | mobile | varchar(25) | --- | code | int | --- | jobTitle | varchar(50) | --- | birth | date | --- | Note | varchar(255) | --- | Sex | varchar(5) | -CREATE table employees( -empNum int, -lastName VARCHAR(50), -firstName VARCHAR(50), -mobile VARCHAR(25), -code int, -jobTitle VARCHAR(50), -birth date, -Note VARCHAR(50), -Sex VARCHAR(5)); --- **要求4:**将表employees的mobile字段修改到code字段后面。 -alter table employees MODIFY mobile VARCHAR(25) after code; --- **要求5:**将表employees的birth字段改名为birthday; -alter table employees change birth birthday date; --- **要求6:**修改sex字段,数据类型为char(1)。 -alter table employees MODIFY sex char(1); --- **要求7:**删除字段note; -alter table employees drop note; --- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); -alter table employees add favoriate_activity varchar(100); --- **要求9:**将表employees的名称修改为 employees_info -alter table employees rename to employees_info; -``` - -### 第二题 - -```mysql --- 1、创建数据库test02db -CREATE DATABASE test02db; --- 2、创建表格pet -use test02db; --- | 字段名 | 字段说明 | 数据类型 | --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | -CREATE TABLE pet( -name VARCHAR(20), -owner VARCHAR(20), -species VARCHAR(20), -sex char(1), -birth year, -death year); --- 3、添加记录 --- --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | -INSERT into pet VALUES('Fluffy','harold','Cat','f',2003,2010),('Claws','gwen','Cat','m',2004,null),('Buffy',null,'Dog','f',2009,null),('Fang','benny','Dog','m',2000,null),('bowser','diane','Dog','m',2003,2009),('Chirpy',null,'Bird','f',2008,null); -SELECT * from pet; --- 4、 添加字段主人的生日owner_birth。 -alter table pet add owner_birth VARCHAR(10); --- 5、 将名称为Claws的猫的主人改为kevin -UPDATE pet set owner='kevin' WHERE name='Claws'; -SELECT * from pet; --- 6、 将没有死的狗的主人改为duck -UPDATE pet set owner='duck' WHERE name='Fang'; -SELECT * from pet; --- 7、 查询没有主人的宠物的名字; -SELECT * from pet where isnull(owner); -SELECT owner from pet where isnull; --- 8、 查询已经死了的cat的姓名,主人,以及去世时间; -select name,owner,death from pet where death !='' and species='Cat'; --- 9、 删除已经死亡的狗 -delete FROM pet where death !=''and species='Dog'; --- 10、查询所有宠物信息 -SELECT * from pet; -``` - -### 第三题 - -```mysql --- 1、创建数据库:test03_company -create database test03_company charset utf8; --- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 --- A.部门表(department): --- 部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 -use test03_company ; -create table department( -depid int primary key auto_increment, -depname char(10) not null unique key, -deinfo varchar(200) -); --- B.雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 --- * ​ 雇员编号为主键; --- * ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); --- * ​ 性别默认为男; -create table employee ( -empid int primary key auto_increment, -name varchar(10) not null, -sex enum('男','女') not null default '男', -title varchar(10), -birthday date, -depid int, -foreign key (depid) references department(depid) -); - --- C.工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - --- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) -CREATE table salary( -empid int PRIMARY key auto_increment, -basesalary VARCHAR(50), -titlesalary VARCHAR(50), -deduction VARCHAR(50), -FOREIGN key (empid) REFERENCES employee(empid) -); --- 4、添加数据如下: --- 部门表: --- | 部门编号 | 部门名称 | 部门简介 | --- | -------- | -------- | ------------ | --- | 111 | 生产部 | Null | --- | 222 | 销售部 | Null | --- | 333 | 人事部 | 人力资源管理 | -insert into department VALUES(111,'生产部',null),(222,'销售部',null),(333,'人事部','人力资源管理'); --- 雇员表: - --- | 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | --- | -------- | ---- | ---- | ---------- | ---------- | ------------ | --- | 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | --- | 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | --- | 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | --- | 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | -INSERT into employee VALUES(1001,'张三','男','高级工程师','1975-1-1',111),(1002,'李四','女','助工','1985-1-1',111),(1003,'王五','男','工程师','1978-11-11',222),(1004,'张六','男','工程师','1999-1-1',222); --- 工资表: - --- | 雇员编号 | 基本工资 | 职务工资 | 扣除 | --- | -------- | -------- | -------- | ---- | --- | 1001 | 2200 | 1100 | 200 | --- | 1002 | 1200 | 200 | NULL | --- | 1003 | 2900 | 700 | 200 | --- | 1004 | 1950 | 700 | 150 | -insert into salary VALUES(1001,2200,1100,200),(1002,1200,200,null),(1003,2900,700,200),(1004,1950,700,150); -``` - -### 第四题 - -```mysql --- 1、创建一个数据库:test04_school --- -CREATE DATABASE test04_school CHARSET utf8; --- 2、创建如下表格 --- --- 表1 Department表的定义 --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | --- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | --- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | -use test04_school; -CREATE table department( -DepNo int not null PRIMARY key unique key, -DepName VARCHAR(50) not null, -DepNote varchar(50)); --- 表2 Teacher表的定义 --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | Number | 教工号 | int | 是 | 否 | 是 | 是 | --- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | --- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | --- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | --- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | --- | Salary | 工资 | float | 否 | 否 | 否 | 否 | --- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | -CREATE table teacher( -Number int not null primary key unique key, -Name VARCHAR(30)not null, -Sex varchar(4), -Birth date, -DepNo int, -Salary float, -Address varchar(100), -FOREIGN key (DepNo)REFERENCES department(DepNo)); --- 3、添加记录 --- --- | **DepNo** | **DepName** | **DepNote** | --- | --------- | ----------- | ------------------ | --- | 601 | 软件技术系 | 软件技术等专业 | --- | 602 | 网络技术系 | 多媒体技术等专业 | --- | 603 | 艺术设计系 | 广告艺术设计等专业 | --- | 604 | 管理工程系 | 连锁经营管理等专业 | -INSERT into department VALUES(601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'),(603,'艺术设计系','广告艺术设计等专业'),(604,'管理工程系','连锁经营管理等专业'); --- | **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | --- | ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | --- | 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | --- | 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | --- | 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | --- | 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | --- | 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | -INSERT into teacher VALUES(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'),(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'),(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'),(2004,'James','女','1980-10-20',602,3500,'四川省成都市'),(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); --- 4、用SELECT语句查询Teacher表的所有记录。 -SELECT*from teacher; -``` - diff --git "a/50 \345\274\240\350\265\267\347\221\236/20230224 select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" "b/50 \345\274\240\350\265\267\347\221\236/20230224 select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" deleted file mode 100644 index 6b0181a1e8bcb963cc5eaf95d3663d8fe0596e21..0000000000000000000000000000000000000000 --- "a/50 \345\274\240\350\265\267\347\221\236/20230224 select\350\257\255\345\217\245\345\222\214\350\277\220\347\256\227\347\254\246.md" +++ /dev/null @@ -1,361 +0,0 @@ -# 2.23 查询select语句和运算符 - -### select语句格式: - -```mysql -SELECT 字段列表 FROM 表名称; - -SELECT 字段列表 FROM 表名称 WHERE 条件; -``` - -### 使用别名(临时名称) - -```mysql -select 字段名1 as "别名1", 字段名2 as "别名2" from 表名称 as 别名; -``` - -- 列的别名有空格时,请加双引号。**==列的别名==中没有空格时,双引号可以加也可以不加**。 -- ==**表的别名不能加双引号**==,表的别名中间不能包含空格。 -- as大小写都可以,as也完全可以省略。 - -```mysql -示例: -mysql> select id "学号",name "姓名" from student; -+------+------+ -| 学号 | 姓名 | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) - -mysql> select id 学号,name 姓名 from student; -+------+------+ -| 学号 | 姓名 | -+------+------+ -| 1 | 张三 | -| 2 | 李四 | -+------+------+ -2 rows in set (0.00 sec) -``` - -### 结果去重 - -mysql可以在查询结果中使用distinct关键字去重。 - -```mysql -select distinct 字段列表 from 表名称 【where 条件】; - -示例: -select distinct did from t_employee; -``` - -### 算术运算符 - -```mysql -加:+ - 在MySQL +就是求和,没有字符串拼接 -减:- -乘:* -除:/ div(只保留整数部分) - div:两个数相除只保留整数部分 - /:数学中的除 -模:% mod - -mysql中没有 +=等运算符 -``` - -### 比较运算符 - -```mysql -大于:> -小于:< -大于等于:>= -小于等于:>= -等于:= 不能用于null判断 -不等于:!= 或 <> 不能用于null判断 -判断是null 用 is null 或 用 <=> null -判断不是null is not null -``` - -### 区间或集合范围比较运算符 - -```mysql -区间范围:between x and y - not between x and y -集合范围:in (x,x,x) - not in(x,x,x) -between ... and ... 结果包含两端的边界 - -示例: -#查询薪资在[10000,15000] -select * from t_employee where salary>=10000 && salary<=15000; -select * from t_employee where salary between 10000 and 15000; - -#查询籍贯在这几个地方的 -select * from t_employee where work_place in ('北京', '浙江', '江西'); - -#查询薪资不在[10000,15000] -select * from t_employee where salary not between 10000 and 15000; - -#查询籍贯不在这几个地方的 -select * from t_employee where work_place not in ('北京', '浙江', '江西'); -``` - -### 模糊匹配比较运算符 - -%:代表任意个字符 - -_:代表一个字符,如果两个下划线代表两个字符 - -```mysql -示例: -#查询名字中包含'冰'字 -select * from t_employee where ename like '%冰%'; - -#查询名字以‘雷'结尾的 -select * from t_employee where ename like '%远'; - -#查询名字以’李'开头 -select * from t_employee where ename like '李%'; - -#查询名字有冰这个字,但是冰的前面只能有1个字 -select * from t_employee where ename like '_冰%'; - -#查询当前mysql数据库的字符集情况 -show variables like '%character%'; -``` - -### 逻辑运算符 - -```mysql -逻辑与:&& 或 and -逻辑或:|| 或 or -逻辑非:! 或 not -逻辑异或: xor - -示例: -#查询薪资高于15000,并且性别是男的员工 -select * from t_employee where salary>15000 and gender='男'; -select * from t_employee where salary>15000 && gender='男'; - -select * from t_employee where salary>15000 & gender='男';#错误得不到值 &按位与 -select * from t_employee where (salary>15000) & (gender='男'); - -#查询薪资高于15000,或者did为1的员工 -select * from t_employee where salary>15000 or did = 1; -select * from t_employee where salary>15000 || did = 1; - -#查询薪资不在[15000,20000]范围的 -select * from t_employee where salary not between 15000 and 20000; -select * from t_employee where !(salary between 15000 and 20000); - -#查询薪资高于15000,或者did为1的员工,两者只能满足其一 -select * from t_employee where salary>15000 xor did = 1; -select * from t_employee where (salary>15000) ^ (did = 1); -``` - -### 关于null值的问题、 - -```mysql -#(1)判断时 -xx is null -xx is not null -xx <=> null - -#(2)计算时 -ifnull(xx,代替值) 当xx是null时,用代替值计算 - -示例: -#查询员工的实发工资,实发工资 = 薪资 + 薪资 * 奖金比例 -select ename , salary + salary * commission_pct "实发工资" from t_employee; #失败,当commission_pct为null,结果都为null - -select ename ,salary , commission_pct, salary + salary * ifnull(commission_pct,0) "实发工资" from t_employee; -``` - -### 位运算符 - -```mysql -左移:<< -右移:>> -按位与:& -按位或:| -按位异或:^ -按位取反:~ -``` - - - -# 作业 - -## 第1题:员工表 - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - -```mysql -CREATE DATABASE test03 CHARSET utf8; -USE test03; - -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - -**要求1:**查询出薪资在12000~13000之间的员工信息。 - -```mysql -SELECT * FROM employee WHERE salary BETWEEN 12000 AND 13000; -``` - -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -```mysql -SELECT id,`name`,addr FROM employee WHERE `name` LIKE '刘%'; -``` - -**要求3:**将“李四”的家庭住址改为“广东韶关” - -```mysql -UPDATE employee SET addr = '广东韶关' WHERE `name` = '李四'; -``` - -**要求4:**查询出名字中带“小”的员工 - -```mysql -SELECT `name` FROM employee WHERE `name` LIKE '%小%'; -``` - -**要求5:**查询出薪资高于11000的男员工信息 - -```mysql -SELECT * FROM employee WHERE salary>11000 AND sex='男'; -``` - -**要求6:**查询没有登记电话号码的员工 - -```mysql -SELECT `name` FROM employee WHERE tel is NULL; -``` - -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -```mysql -SELECT `name` FROM employee WHERE sex = '男' AND salary = 12000 OR addr = '广东深圳' OR addr='广东广州'; -``` - -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - -```mysql -SELECT `name`,salary FROM employee; -``` - - - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -``` - -**要求1:** 查询大国 的国家名称、人口和面积。 - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) - -- 人口至少为 2500 万(即 25000000) - - ```mysql - SELECT `name`,area,population FROM countries_info WHERE area>3000000 OR population>=25000000; - ``` - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -```mysql -SELECT * FROM countries_info WHERE continent = 'Asia'; -``` - -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -```mysql -SELECT * FROM countries_info WHERE area<10000 AND population<100000; -``` - -**要求4:**查询国家名字中包含“o“字母的国家信息 - -```mysql -SELECT * FROM countries_info WHERE `name` LIKE '%o%'; -``` - -**要求5:**查询GDP值超过10000000000的国家信息 - -```mysql -SELECT * FROM countries_info WHERE gdp>10000000000; -``` - -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -```mysql -SELECT `name` 国家名,population 人口,gdp GDP值,gdp/population AS 人均贡献GDP值 FROM countries_info; -``` - -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - -```mysql -SELECT * FROM countries_info WHERE gdp/population<1000; -``` - -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -```mysql -SELECT `name` 国家名,population 人口,gdp GDP值,area/population AS 人均国土面积值 FROM countries_info; -``` - diff --git "a/50 \345\274\240\350\265\267\347\221\236/20230228 \350\201\224\350\241\250\346\237\245\350\257\242.md" "b/50 \345\274\240\350\265\267\347\221\236/20230228 \350\201\224\350\241\250\346\237\245\350\257\242.md" deleted file mode 100644 index c557fde8d8433f3155155c27e6a3e15fd118b847..0000000000000000000000000000000000000000 --- "a/50 \345\274\240\350\265\267\347\221\236/20230228 \350\201\224\350\241\250\346\237\245\350\257\242.md" +++ /dev/null @@ -1,554 +0,0 @@ -```mysql -drop database users; -create database users charset=utf8; -use users; -create table Student( -Sno varchar(20) not null comment'学号', -Sname varchar(20) not null comment'学生姓名', -Ssex varchar(20) not null comment'学生性别', -primary key(Sno), -Sbirthday datetime comment'学生出生年月', -Class varchar(20) comment'学生所在班级' -) comment'学生表'; -create table Course( -Cno varchar(20) not null comment'课程号', -Cname varchar(20) not null comment'课程名称', -primary key(Cno), -Tno varchar(20) not null comment'教工编号' -) comment'课程表'; -create table Score( -Sno varchar(20) not null comment'学号', -Cno varchar(20) not null comment'课程号', -primary key(Sno,Cno), -Degree Decimal(4,1) comment'成绩' -) comment'成绩表'; -create table Teacher( -Tno varchar(20) not null comment'教工编号', -Tname varchar(20) not null comment'教工姓名', -Tsex varchar(20) not null comment'教工性别', -Tbirthday datetime comment'教工出生年月', -Prof varchar(20) comment'职称', -primary key(Tno), -Depart varchar(20) not null comment'教工所在部门' -) comment'教师表'; -alter table Course -add foreign key(Tno) references Teacher(Tno); -insert into Student -values -(108,'曾华','男','1977-9-1',95033), -(105,'匡明','男','1975-10-2',95031), -(107,'王丽','女','1976-1-23',95033), -(101,'李军','男','1976-2-20',95033), -(109,'王芳','女','1975-2-10',95031), -(103,'陆君','男','1974-6-3',95031); -set @@foreign_key_checks=0; -insert into Course -values -('3-105','计算机导论',825), -('3-245','操作系统',804), -('6-166','数字电路',856), -('9-888','高等数学',831); -insert into Score -values -(103,'3-245',86), -(105,'3-245',76), -(109,'3-245',68), -(103,'3-105',92), -(105,'3-105',88), -(109,'3-105',76), -(101,'3-105',64), -(107,'3-105',91), -(108,'3-105',78), -(101,'6-166',85), -(107,'6-166',79), -(108,'6-166',81); -insert into Teacher -values -(804,'李诚','男','1958-12-2','副教授','计算机系'), -(856,'张旭','男','1969-3-12','讲师','电子工程系'), -(825,'王萍','女','1972-5-5','助教','计算机系'), -(831,'刘冰','女','1977-8-14','助教','电子工程系'); -set @@foreign_key_checks=1; --- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ -select * from Student inner join Course; --- 2,查询没有学生的教师的所有信息 -select Tname from Student inner join Teacher WHERE Sno having null; -4. 查询 -① 查询Score表中的最高分的学生学号和课程号。 -select Sno,Cno from Score where Degree =92 ; -select Sno,Cno from Score WHERE Degree <=> (Select MAX(Degree) from Score); -② 查询所有学生的Sname、Cno和Degree列。 -select Sname,Cno,Degree from Student cross join Score on Student.Sno = Score.Sno ; -③ 查询所有学生的Sno、Cname和Degree列。 -select Student.Sno,Cname,Degree from Student inner join Course cross join Score on Student.Sno = Score.Sno and Course.Cno = Score.Cno; -④ 查询所有学生的Sname、Cname和Degree列。 -select Sname,Cname,Degree from Student inner join Course cross join Score on Student.Sno = Score.Sno and Course.Cno = Score.Cno ; -⑤ 查询“95033”班学生的平均分。 -select AVG(Degree),Class from Student inner join Score on Student.Sno = Score.Sno where Class=95033; -⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 -select Sno from Score where Degree > 76; -select Sno from Score where Degree> (select Degree from Score where Cno = '3-105' and Sno = 109) ; -⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 -select Degree from Score where Degree < (select MAX(Degree) from Score); -⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 -select * from Score where Degree >76; -select * from Score where Degree> (select Degree from Score where Cno = '3-105' and Sno = 109) ; -⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 - -⑩ 查询“张旭“教师任课的学生成绩。 -select Degree from Teacher inner join Score where Tname='张旭'; -11 查询选修某课程的同学人数多于5人的教师姓名。 -select distinct Tname from Score inner join Teacher where Sno >5; -12 查询出“计算机系“教师所教课程的成绩表。 -select distinct Degree from Teacher inner join Score where Depart ='计算机系'; -13 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 -select Tname,Prof from Teacher where Depart ='计算机系' or Depart ='电子工程系'; -14 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 -select Cno,Sno,Degree from Score where Cno ='3-105' xor Degree > Cno ='3-245' xor Degree order by Degree desc ; -15 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. -select Cno,Sno,Degree from Score where Cno ='3-105' xor Degree > Cno ='3-245' xor Degree; -16 查询成绩比该课程平均成绩低的同学的成绩表。 -select Degree from Score where Degree <(select AVG(Degree) from Score); -17 查询所有任课教师的Tname和Depart. -select Tname,Depart from Teacher; -18 查询所有未讲课的教师的Tname和Depart. -select Tname,Depart from Teacher inner join Course where Cname is null; -19 查询“男”教师及其所上的课程。 -select Tname,Tsex,Cname from Teacher inner join Course where Tsex ='男'; -20 查询最高分同学的Sno、Cno和Degree列。 -select Sno,Cno,Degree from Score where Degree =92; -select Sno,Cno,Degree from Score where Degree = (select MAX(Degree) from Score); -21 查询和“李军”同性别的所有同学的Sname. -select Sname from Student where Ssex ='男' and Sname != '李军'; -22 查询和“李军”同性别并同班的同学Sname. -select Sname from Student where Ssex ='男' and Sname != '李军' and Class ='95033'; -23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 -select Degree from Course inner join Score cross join Student on Student.Sno = Score.Sno where Cname ='计算机导论' and Ssex ='男'; - -``` - -笔记 - -- **什么是分组查询?** - -> 将查询结果按照1个或多个字段进行分组,字段值相同的为一组 -> 其实就是按照某一列进行分类 - -- **分组使用** - -> **SELECT gender from employee GROUP BY gender;** -> -> 根据gender字段来分组,gender字段的全部值只有两个('男'和'女'),所以分为了两组 -> 当group by单独使用时,只显示出每一组的第一条记录 -> 所以group by单独使用时的实际意义不大 - -![img](https://pic3.zhimg.com/80/v2-2dd056cc432e89898c80cbacf78c3dda_720w.webp) - -对这个表进行GROUP BY操作 - -```text -SELECT * FROM employee; -``` - -![img](https://pic3.zhimg.com/80/v2-650d569e895acc26b20d0a0edc2596e6_720w.webp) - -只显示了每一组第一条记录 - -男生的第一个人是张三 女生的第一个人是王五 - -![img](https://pic2.zhimg.com/80/v2-a289b4d4803b3e9869656420f5c87d75_720w.webp) - -所以说GROUP BY 一般不单独使用 - - - -**一般来说 你按照什么分组 就查询什么东西** - -**比如:** - -```sql -select department from employee group by department; -``` - -查询结果如上。 - -**分完组然后呢?** - -- **如何对分组后的结果进行查询?** - -**关键字:group_concat()** - -将职员表 按照部门分组 查询每个部门职员的姓名 - -```sql -select department,group_concat(name) from employee group by department; -``` - -结果如下: - -![img](https://pic2.zhimg.com/80/v2-ae5227cf66ecdc638e79980dede53499_720w.webp) - ------- - -- **GROUP BY + 聚合函数** - -**for example:** - -将职员表 按照部门分组 查询每个部门职员的薪水 和 **薪水总数** - -```sql -select department,group_concat(salary),sum(salary) from employee group by department; -``` - -![img](https://pic1.zhimg.com/80/v2-9b5ca13455b29ebcf2e598d38ea87754_720w.webp) - -> 查询每个部门的名称 以及 每个部门的人数 - -```mysql -select department,group_concat(name),count(*) from employee group by department; -``` - -> 查询每个部门的部门名称 以及 每个部门工资大于1500的人数 - -PS:**先把大于1500的人查出来 再做分组** - -```sql -select department,group_concat(salary),count(*) from employee group by department; -``` - ------- - -**group by + having** - -- 用来分组**查询后**制定一些条件来输出查询结果 -- having的作用和where一样,但having只能用于group by -- 查询工资总和大于9000的部门名称以及工资和 - -```sql -SELECT department,GROUP_CONCAT(salary),SUM(salary) FROM employee -GROUP BY department HAVING SUM(salary) > 9000; -``` - -- having和where的区别 - -> having是在分组后对数据进行过滤 -> where是在分组前对数据进行过滤 -> having后面可以使用分组函数(统计函数) -> where后面不可以使用分组函数 -> where是对分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组;而having是对分组后数据的约束 - - - -- 查询工资和大于2000的 工资总和大于6000的部门名称以及工资和 - -```sql -SELECT department,GROUP_CONCAT(salary).SUM(salary) FROM employee -WHERE salary > 2000 -GROUP BY department -HAVING SUNM(salary) > 9000 -ORDER BY SUM(salary) DESC; -//降序排列 -``` - ------- - -**书写顺序** - -![img](https://pic3.zhimg.com/80/v2-166d3cee10b01a68e90af2a5d5ed9866_720w.webp) - ------- - -**Limit的使用** - -![img](https://pic3.zhimg.com/80/v2-cc55920af6e230cfe251bf53dd35a9c6_720w.webp) - -```sql -SELECT * FROM employee LIMIT 3,3; -``` - -**从第三行开始 取三条数据** - -**PS:行是从0开始数的** - -![img](https://pic3.zhimg.com/80/v2-320efb37091a14d6e9b35e997c81941a_720w.webp) - -![img](https://pic1.zhimg.com/80/v2-29ecf40b5281d6f98d6a78ecac889ab8_720w.webp) - ------- - -**limit可以用于分页操作** - -![img](https://pic3.zhimg.com/80/v2-71ce51c3e1d647067bc562f362b88ee6_720w.webp) - -- **什么是分组查询?** - -> 将查询结果按照1个或多个字段进行分组,字段值相同的为一组 -> 其实就是按照某一列进行分类 - -- **分组使用** - -> **SELECT gender from employee GROUP BY gender;** -> -> 根据gender字段来分组,gender字段的全部值只有两个('男'和'女'),所以分为了两组 -> 当group by单独使用时,只显示出每一组的第一条记录 -> 所以group by单独使用时的实际意义不大 - -![img](https://pic3.zhimg.com/80/v2-2dd056cc432e89898c80cbacf78c3dda_720w.webp) - -对这个表进行GROUP BY操作 - -```text -SELECT * FROM employee; -``` - -![img](https://pic3.zhimg.com/80/v2-650d569e895acc26b20d0a0edc2596e6_720w.webp) - -只显示了每一组第一条记录 - -男生的第一个人是张三 女生的第一个人是王五 - -![img](https://pic2.zhimg.com/80/v2-a289b4d4803b3e9869656420f5c87d75_720w.webp) - -所以说GROUP BY 一般不单独使用 - - - -**一般来说 你按照什么分组 就查询什么东西** - -**比如:** - -```text -select department from employee group by department; -``` - -![img](https://pic2.zhimg.com/80/v2-9f78a7bd599627321b0323af525d6ff9_720w.webp) - -查询结果如上。 - -**分完组然后呢?** - -- **如何对分组后的结果进行查询?** - -**关键字:group_concat()** - -将职员表 按照部门分组 查询每个部门职员的姓名 - -```text -select department,group_concat(name) from employee group by department; -``` - -结果如下: - -![img](https://pic2.zhimg.com/80/v2-ae5227cf66ecdc638e79980dede53499_720w.webp) - ------- - -- **GROUP BY + 聚合函数** - -**for example:** - -将职员表 按照部门分组 查询每个部门职员的薪水 和 **薪水总数** - -```text -select department,group_concat(salary),sum(salary) from employee group by department; -``` - -![img](https://pic1.zhimg.com/80/v2-9b5ca13455b29ebcf2e598d38ea87754_720w.webp) - -> 查询每个部门的名称 以及 每个部门的人数 - -```mysql -select department,group_concat(name),count(*) from employee group by department; -``` - -> 查询每个部门的部门名称 以及 每个部门工资大于1500的人数 - -PS:**先把大于1500的人查出来 再做分组** - -```sql -select department,group_concat(salary),count(*) from employee group by department; -``` - ------- - -**group by + having** - -- 用来分组**查询后**制定一些条件来输出查询结果 -- having的作用和where一样,但having只能用于group by -- 查询工资总和大于9000的部门名称以及工资和 - -```sql -SELECT department,GROUP_CONCAT(salary),SUM(salary) FROM employee -GROUP BY department HAVING SUM(salary) > 9000; -``` - -- having和where的区别 - -> having是在分组后对数据进行过滤 -> where是在分组前对数据进行过滤 -> having后面可以使用分组函数(统计函数) -> where后面不可以使用分组函数 -> where是对分组前记录的条件,如果某行记录没有满足where子句的条件,那么这行记录不会参加分组;而having是对分组后数据的约束 - - - -- 查询工资和大于2000的 工资总和大于6000的部门名称以及工资和 - -```sql -SELECT department,GROUP_CONCAT(salary).SUM(salary) FROM employee -WHERE salary > 2000 -GROUP BY department -HAVING SUNM(salary) > 9000 -ORDER BY SUM(salary) DESC; -//降序排列 -``` - ------- - -**书写顺序** - -![img](https://pic3.zhimg.com/80/v2-166d3cee10b01a68e90af2a5d5ed9866_720w.webp) - ------- - -**Limit的使用** - -![img](https://pic3.zhimg.com/80/v2-cc55920af6e230cfe251bf53dd35a9c6_720w.webp) - -```text -SELECT * FROM employee LIMIT 3,3; -``` - -**从第三行开始 取三条数据** - -**PS:行是从0开始数的** - -![img](https://pic3.zhimg.com/80/v2-320efb37091a14d6e9b35e997c81941a_720w.webp) - -![img](https://pic1.zhimg.com/80/v2-29ecf40b5281d6f98d6a78ecac889ab8_720w.webp) - ------- - -**limit可以用于分页操作** - -![img](https://pic3.zhimg.com/80/v2-71ce51c3e1d647067bc562f362b88ee6_720w.webp) - -```mysql -inner join,full outer join,left join,right jion -内部连接 inner join 两表都满足的组合 -full outer 全连 两表相同的组合在一起,A表有,B表没有的数据(显示为null),同样B表有 -A表没有的显示为(null) -A表 left join B表 左连,以A表为基础,A表的全部数据,B表有的组合。没有的为null -A表 right join B表 右连,以B表为基础,B表的全部数据,A表的有的组合。没有的为null - - -查询分析器中执行: ---建表table1,table2: -create table table1(id int,name varchar(10)) -create table table2(id int,score int) -insert into table1 select 1,'lee' -insert into table1 select 2,'zhang' -insert into table1 select 4,'wang' -insert into table2 select 1,90 -insert into table2 select 2,100 -insert into table2 select 3,70 -如表 -------------------------------------------------- -table1|table2| -------------------------------------------------- -idname|idscore| -1lee|190| -2zhang|2100| -4wang|370| -------------------------------------------------- - -以下均在查询分析器中执行 - -一、外连接 -1.概念:包括左向外联接、右向外联接或完整外部联接 - -2.左连接:left join 或 left outer join -(1)左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。 -(2)sql语句 -select * from table1 left join table2 on table1.id=table2.id --------------结果------------- -idnameidscore ------------------------------- -1lee190 -2zhang2100 -4wangNULLNULL ------------------------------- -注释:包含table1的所有子句,根据指定条件返回table2相应的字段,不符合的以null显示 - -3.右连接:right join 或 right outer join -(1)右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。 -(2)sql语句 -select * from table1 right join table2 on table1.id=table2.id --------------结果------------- -idnameidscore ------------------------------- -1lee190 -2zhang2100 -NULLNULL370 ------------------------------- -注释:包含table2的所有子句,根据指定条件返回table1相应的字段,不符合的以null显示 - -4.完整外部联接:full join 或 full outer join -(1)完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。 -(2)sql语句 -select * from table1 full join table2 on table1.id=table2.id --------------结果------------- -idnameidscore ------------------------------- -1lee190 -2zhang2100 -4wangNULLNULL -NULLNULL370 ------------------------------- -注释:返回左右连接的和(见上左、右连接) - -二、内连接 -1.概念:内联接是用比较运算符比较要联接列的值的联接 - -2.内连接:join 或 inner join - -3.sql语句 -select * from table1 join table2 on table1.id=table2.id --------------结果------------- -idnameidscore ------------------------------- -1lee190 -2zhang2100 ------------------------------- -注释:只返回符合条件的table1和table2的列 - -4.等价(与下列执行效果相同) -A:select a.*,b.* from table1 a,table2 b where a.id=b.id -B:select * from table1 cross join table2 where table1.id=table2.id (注:cross join后加条件只能用where,不能用on) - -三、交叉连接(完全) - -1.概念:没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生3*3=9条记录) - -2.交叉连接:cross join (不带条件where...) - -3.sql语句 -select * from table1 cross join table2 --------------结果------------- -idnameidscore ------------------------------- -1lee190 -2zhang190 -4wang190 -1lee2100 -2zhang2100 -4wang2100 -1lee370 -2zhang370 -4wang370 ------------------------------- -注释:返回3*3=9条记录,即笛卡尔积 - -4.等价(与下列执行效果相同) -A:select * from table1,table2 -``` \ No newline at end of file diff --git "a/50 \345\274\240\350\265\267\347\221\236/20230309 \345\255\220\346\237\245\350\257\242.md" "b/50 \345\274\240\350\265\267\347\221\236/20230309 \345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index 9246659965416ac2d7cb69093c5195acd175725b..0000000000000000000000000000000000000000 --- "a/50 \345\274\240\350\265\267\347\221\236/20230309 \345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,163 +0,0 @@ -# 子查询作业 - -create table stuinfo(stuNo varchar(10), -stuName varchar(5), -stuSex enum('男','女'), -stuAge int, -stuAddress varchar(5), -stuSeat int -); -create table stuExam( -examNo int, -stuNo varchar(5), -writtenExam int, -labExam int -); -create table stuMarks( -examNo int, -stuID varchar(5), -score int -); -insert into stuinfo values('s2501','张秋利','男',20,'美国硅谷',1); -insert into stuinfo values('s2502','李斯文','女',18,'湖北武汉',2); -insert into stuinfo values('s2503','马文才','男',18,'湖南长沙',3); -insert into stuinfo values('s2504','欧阳俊雄','女',21,'湖北武汉',4); -insert into stuinfo values('s2505','梅超风','男',16,'湖北武汉',5); -insert into stuinfo values('s2506','陈旋风','男',19,'美国硅谷',6); - -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); - -insert into stumarks values -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); - --- 1.查询出年龄比班上平均年龄大的学生的信息 -select avg(stuAge) from stuinfo; -select * from stuinfo where stuAge>(select avg(stuAge) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -select stuNo,stuName,stuSex,max(score) from stuMarks a - right join stuinfo b on a.stuid=b.stuNo group by stuNo,stuName,stuSex; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -select stuinfo.stuNo,stuName,stuSex,avg(writtenExam+labExam)/2 考试平均分 from stuinfo left JOIN stuexam on stuinfo.stuNo=stuexam.stuNo GROUP BY stuinfo.stuNo,stuName,stuSex; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -select * from stuinfo where stuSex='男' and stuAge >=20; -select * from (select * from stuinfo where stuAge >=20) 年纪大于20 where stuSex='男'; --- 5.查询出年龄比所有男生年龄都大的女生的信息 -select * from stuinfo where stusex='女' and stuAge >all (select stuAge from stuinfo where stusex='男'); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -select *from stuMarks where score >60; -select * from stuinfo a INNER JOIN stumarks b on a.stuNo = b.stuID where a.stuNo != (select stuid from stumarks where score<60); --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select * from stuinfo a inner join stumarks b on a.stuNo=b.stuId; -select * from stuinfo a inner join (select DISTINCT stuid from stumarks) b on a.stuNo = b.stuid; -select * FROM stuinfo where stuno in (select DISTINCT stuid from stumarks); --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select * from stuinfo a left join stumarks b on a.stuNO=b.stuid where score is null; -select * from stuinfo where stuno not in (select distinct stuid from stuMarks); --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -select * from stuinfo a left join stuMarks b on a.stuNO=b.stuid where score>90; -select * from stuinfo where stuNo in (select stuid from stumarks where score >90); --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -select * from stuinfo where stuno=(select stuno from stuexam where (writtenExam+labExam)/2>80); --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) -select * from stuinfo a left join stuExam b on a.stuNo = b.stuNo where writtenExam>(select writtenExam from stuExam where stuNo=(select stuNo from stuinfo where stuname='张秋利')) AND labExam>(select labExam from stuExam where stuNo=(select stuNo from stuinfo where stuname='张秋利')); --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) -select * from stuinfo a left join stuExam b on a.stuNo = b.stuNo where writtenExam>(select writtenExam from stuExam where stuNo=(select stuNo from stuinfo where stuname='张秋利')) OR labExam>(select labExam from stuExam where stuNo=(select stuNo from stuinfo where stuname='张秋利')); --- 13.查询班上比所有男生年龄都要大的女生的信息 -select * from stuinfo where stuSex='女' and stuAge >ALL(select stuAge from stuinfo where stusex='男'); --- 14.查询出只要比某个男生年龄大的女生的信息 -select * from stuinfo where stuSex='女' AND stuAge >any(select stuage from stuinfo where stusex='男'); -select * from stuinfo where stuSex='女' AND stuAge >(select MIN(stuAge) from stuinfo where stusex='男'); - -## 笔记 - -##### 子查询的顺序 - -(1)from:从哪些表中筛选 - -(2)on:关联多表查询时,去除笛卡尔积 - -(3)where:从表中筛选的条件 - -(4)group by:分组依据 - -(5)having:在统计结果中再次筛选(with rollup) - -(6)order by:排序 - -(7)limit:分页 - -必须按照(1)-(7)的顺序编写子句。 - -##### on子句 - -/* -(1)on必须配合join使用 -(2)on后面只写关联条件 -所谓关联条件是两个表的关联字段的关系 -(3)有n张表关联,就有n-1个关联条件 -两张表关联,就有1个关联条件 -三张表关联,就有2个关联条件 -*/ -SELECT * -FROM t_employee INNER JOIN t_department -ON t_employee.did = t_department.did; #1个关联条件 - -#查询员工的编号,姓名,职位编号,职位名称,部门编号,部门名称 -#需要t_employee员工表,t_department部门表,t_job职位表 -SELECT eid,ename,t_job.jid,t_job.jname, `t_department`.`did`,`t_department`.`dname` -FROM t_employee INNER JOIN t_department INNER JOIN t_job -ON t_employee.did = t_department.did AND t_employee.job_id = t_job.jid; - -##### where子句 - -在查询结果中筛选 -#查询女员工的信息,以及女员工的部门信息 -SELECT * -FROM t_employee INNER JOIN t_department -ON t_employee.did = t_department.did -WHERE gender = '女'; - -##### order by子句 - -升序和降序,默认是升序 -asc代表升序 -desc 代表降序 -*/ -#查询员工信息,按照薪资从高到低 -SELECT * FROM t_employee -ORDER BY salary DESC; - -#查询每一个部门薪资超过10000的男和女员工的人数,显示部门编号,部门的名称,性别,人数 -#只显示人数低于3人,按照人数升序排列 -SELECT t_department.did,dname,gender,COUNT(eid) -FROM t_employee RIGHT JOIN t_department -ON t_employee.did = t_department.did -WHERE salary > 10000 -GROUP BY t_department.did,gender -HAVING COUNT(eid) < 3 -ORDER BY COUNT(eid); - -#查询员工的薪资,按照薪资从低到高,薪资相同按照员工编号从高到低 -SELECT * -FROM t_employee -ORDER BY salary ASC , eid DESC; - -##### 什么是子查询 - --- 嵌套在其它SQL语句中的查询语句, - --- 子查询通常先运行,所以要用()包括起来 - --- 子查询的运行结果,可以做为其它语句的条件、数据源等 - -select ① from ③ where ②; diff --git "a/51 \347\250\213\350\210\234/20230220 MySQl\346\225\260\346\215\256\345\272\223\346\246\202\350\277\260.md" "b/51 \347\250\213\350\210\234/20230220 MySQl\346\225\260\346\215\256\345\272\223\346\246\202\350\277\260.md" deleted file mode 100644 index 80ceb4d0ebd618ebdcdb22663277385e44d15372..0000000000000000000000000000000000000000 --- "a/51 \347\250\213\350\210\234/20230220 MySQl\346\225\260\346\215\256\345\272\223\346\246\202\350\277\260.md" +++ /dev/null @@ -1,628 +0,0 @@ -# 笔记: - -# 第1章 MySQL数据库概述 - -## 1.1、基本概念 - -- 数据库是什么? - - 存储数据的地方 - - DB:数据库(Database) -- 为什么要用数据库? - - 因为应用程序产生的数据是在内存中的,如果程序退出或者是断电了,则数据就会消失。使用数据库是为了能够永久保存数据。当然这里指的是非内存数据库。 - - 用普通文件存储行不行?把数据写入到硬盘上的文件中,当然可以实现持久化的目标,但是不利于后期的检索和管理等。 -- 数据库分类 - - 早期:层次模型、网状模型、关系模型, - - 随着时间的推移和市场竞争,最终,基于关系模型的关系型数据库获得了绝对市场份额。 - - 目前市场上主要分: - - 关系型数据库、非关系型数据库两大类 -- 数据库有了,要怎么管理呢? - - DBMS:数据库管理系统 ( DataBase Management System )是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。 - - MySQL、Oracle、SqlServer都是数据库管理系统(DBMS,Database Management System)是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。 -- SQL是什么? - - SQL是结构化查询语言(Structure Query Language),专门用来操作/访问数据库的通用语言。 - -## 1.2、MySQL数据库管理系统 - -- 根据数据库的分类。DBMS也分两大类: - - 关系型数据库管理系统 :MySQL , Oracle , SQL Server , SQLite , IBM DB2 , ... SQL语言来交互 - - 非关系型数据库管理系统:Redis , MongoDB , ... -- 什么是关系型数据库和非关系数据库? - - **关系型数据库**,采用关系模型来组织数据,简单来说,**关系模型指的就是二维表格模型**。类似于Excel工作表。 - - **非关系型数据库**,可看成传统关系型数据库的功能阉割版本,基于键值对存储数据,通过减少很少用的功能,来提高性能。 - - 我们要学的MySQL,就是关系型数据库管理系统 - - 在互联网行业,MySQL数据库毫无疑问已经是最常用的数据库。MySQL数据库由瑞典MySQL AB公司开发。该公司于2008年1月16号被Sun(Stanford University Network)公司收购。然而2009年,SUN公司又被Oracle收购。因此,MySQL数据库现在隶属于Oracle(甲骨文)公司。 - - 查看数据库最新排名:[https://db-engines.com/en/ranking)](https://gitee.com/link?target=https%3A%2F%2Fdb-engines.com%2Fen%2Franking%EF%BC%89) - -**MySQL的优点有很多,其中主要的优势有如下几点:** - -- 可移植性:MySQL数据库几乎支持所有的操作系统 -- 免费:MySQL的社区版完全免费,一般中小型网站的开发都选择 MySQL 作为网站数据库。 -- 开源:2000 年,MySQL公布了自己的源代码,并采用GPL(GNU General Public License)许可协议,正式进入开源的世界。 -- 关系型数据库:MySQL可以利用标准SQL语法进行查询和操作。 -- 速度快、体积小、容易使用:从2009年开始,阿里的“去IOE”(去掉IBM的小型机、Oracle的数据库、EMC的存储设备)备受关注,淘宝DBA团队再次从Oracle转向MySQL,其他使用MySQL数据库的公司还有Facebook、Twitter、YouTube、百度、腾讯、去哪儿、魅族等等,自此,MySQL在市场上占据了很大的份额。 -- 安全性和连接性:所有的密码传输均采用加密形式,从而保证了密码安全。由于MySQL是网络化的,因此可以在因特网上的任何地方访问,提高数据共享的效率。 -- 丰富的接口:提供了用于C、C++、Java、PHP、Python、Ruby和Eiffel、Perl等语言的API。 -- 灵活:能够适应高要求的环境。可嵌入到应用程序中,也可以支持数据仓库、内容索引和部署软件、高可用的冗余系统、在线事务处理系统等各种应用类型。 -- MySQL最重要、最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理(Query Processing)及其他系统任务(Server Task)和数据的存储/提取相分离。这种处理和存储分离的设计可以在使用时根据性能、特性,以及其他需求来选择数据存储的方式。MySQL中同一个数据库,不同的表格可以选择不同的存储引擎。其中使用最多的是InnoDB 和MyISAM,MySQL5.5之后InnoDB是默认的存储引擎。 - -**针对不同用户,MySQL提供三个不同的版本。** - -(1)MySQL Enterprise Server(企业版):能够以更高的性价比为企业提供数据仓库应用,该版本需要付费使用,官方提供电话技术支持。 - -(2)MySQL Cluster(集群版):MySQL 集群是 MySQL 适合于分布式计算环境的高可用、高冗余版本。它采用了 NDB Cluster 存储引擎,允许在 1 个集群中运行多个 MySQL 服务器。它不能单独使用,需要在社区版或企业版基础上使用。 - -(3)MySQL Community Server(社区版):在开源GPL许可证之下可以自由的使用。该版本完全免费,但是官方不提供技术支持。我们的知识授课以社区版为主。在MySQL 社区版开发过程中,同时存在多个发布系列,每个发布处在不同的成熟阶段。 - -- **MySQL5.7(RC)是当前稳定的发布系列**。RC(Release Candidate候选版本)版只针对严重漏洞修复和安全修复重新发布,没有增加会影响该系列的重要功能。从MySQL 5.0、5.1、5.5、5.6直到5.7都基于5这个大版本,升级的小版本。5.0版本中加入了存储过程、服务器端游标、触发器、视图、分布式事务、查询优化器的显著改进以及其他的一些特性。这也为MySQL 5.0之后的版本迈向高性能数据库的发展奠定了基础。 -- MySQL8.0.26(GA)是最新开发的稳定发布系列。GA(General Availability正式发布的版本)是包含新功能的正式发布版本。这个版本是MySQL数据库又一个开拓时代的开始。 - -## 1.3、表的关系 - -MySQL是关系型数据库管理系统,而在关系数据库管理系统中,很多表之间是有关系的,表之间的关系分为一对一关系、一对多关系和多对多关系。 - -1. **一对一** - -该关系中第一个表中的一个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关。 - -1. **一对多** - -第一个表中的一个行可以与第二个表中的一个或多个行相关,但第二个表中的一个行只可以与第一个表中的一个行相关 - -1. **多对多** - -该关系中第一个表中的一个行可以与第二个表中的一个或多个行相关。第二个表中的一个行也可以与第一个表中的一个或多个行相关。**通常两个表的多对多关系会借助第三张表,转换为两个一对多的关系。** - -# 第2章 MySQL的卸载、安装和登录 - -MySQL属于**C/S架构**的软件,所以要先安装服务端(**S**erver),再用客户端(**C**lient)进行连接。 B/S - -- 服务器端:MySQL 5.7 -- 客户端:CMD命令行、MySQL自带client、可视化图形界面工具 - -## 2.1、MySQL数据库服务端的安装 - -- 卸载、安装详细请看《[MySQL5.7_安装和使用文档.md](https://gitee.com/li-jun-xing/mysql-base/blob/master/14 李俊兴/MySQL5.7安装文档.md)》 - -## 2.2、使用客户端登录MySQL服务器端 - -### 方式一:MySQL自带客户端 - -开始菜单==》所有程序==》MySQL==》MySQL Server 5.7==》MySQL 5.7 Command Line Client - -> 说明:仅限于root用户在本机登录 - -### 方式二:使用cmd命令连接 - -**mysql -h 主机名 -P 端口号 -u 用户名 -p密码** - -```sql -例如:mysql -h localhost -P 3306 -u root -proot -``` - -注意: - -(1)-p与密码之间不能有空格,其他参数名与参数值之间可以有空格也可以没有空格 - -```sql -mysql -hlocalhost -P3306 -uroot -proot -``` - -(2)密码建议在下一行输入 - -```sql -mysql -h localhost -P 3306 -u root -p -Enter password:**** -``` - -(3)如果是连本机:-hlocalhost就可以省略,如果端口号没有修改:-P3306也可以省略 - -简写成: - -```sql -mysql -u root -p -Enter password:**** -``` - -连接成功后,有关于MySQL Server服务版本的信息,还有第几次连接的id标识。 - -### 方式三: 使用第三方工具navicat连接 - -Mysql常用的三方工具有很多,比如大名鼎鼎的navicat,sqlyog等等,这里我们使用navicat来做一个连接的事例。首先打开工具,在工具左侧选择新建连接,然后选择要连接的数据库为mysql,然后会弹出一个具体的连接配置的窗口。 - -该窗口在正常连接状态下,只需要填入连接名称,主机的地址,连接端口号,用户名及密码即可。填写完毕点击测试,如果测试成功保存就可以打开我们的mysql数据库连接了。 - -## 2.3、MySQL数据库的编码配置 - -### 命令行操作sql乱码问题 - -```sql -mysql> INSERT INTO t_stu VALUES(1,'张三','男'); -ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'sname' at row 1 -``` - -### 修改my.ini配置文件 - -```sql -在路径:C:\ProgramData\MySQL\MySQL Server 5.7\my.ini 找到my.ini文件 - -修改内容1: - 找到[mysql]命令,大概在63行左右,在其下一行添加 - default-character-set=utf8 -修改内容2: - 找到[mysqld]命令,大概在76行左右,在其下一行添加 - character-set-server=utf8 - collation-server=utf8_general_ci - -修改完毕后,重启MySQL57服务 -``` - -查看编码命令 - -```sql -show variables like 'character_%'; -show variables like 'collation_%'; -``` - -- 如果是以上配置就说明对了 - -### 命令行操作sql仍然乱码问题 - -```sql -mysql> INSERT INTO t_stu VALUES(1,'张三','男'); -ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'sname' at row 1 -``` - -原因:按照刚才的配置,服务器端认为你的客户端的字符集是utf-8,而实际上你的客户端的字符集是GBK。 - -查看所有字符集:**SHOW VARIABLES LIKE 'character_set_%';** - -解决方案,设置当前连接的客户端字符集 **“SET NAMES GBK;”** - -set names gbk;是为了告诉服务器,客户端用的GBK编码,防止乱码。 - -有的时候,这样还不能解决,例如,某些win10操作系统环境下,那么修改命令行的属性-》选项-》勾选使用旧版控制台,然后重启电脑 - -# 第3章 客户端使用演示 - -## 3.1 命令行客户端 - -### 3.1.1 数据库 - -1、查看所有的数据库 - -```sql -show databases; -``` - -2、创建自己的数据库 - -```sql -create database 数据库名 charset utf8; - -#创建mxdx数据库 -create database mxdx; -``` - -3、删除数据库 - -```sql -drop database 数据库名; - -#删除mxdx数据库 -drop database mxdx; -``` - -4、使用自己的数据库 - -```sql -use 数据库名; - -#使用mxdx数据库 -use mxdx; -``` - -说明:如果没有使用use语句,后面针对数据库的操作也没有加“数据名”的限定,那么会报“ERROR 1046 (3D000): No database selected”(没有选择数据库) - -使用完use语句之后,如果接下来的SQL都是针对一个数据库操作的,那就不用重复use了,如果要针对另一个数据库操作,那么要重新use。 - -### 3.1.2 数据表 - -1、查看某个库的所有表格 - -```sql -show tables; #要求前面有use语句 - -show tables from 数据库名; -``` - -2、创建新的表格 - -```sql -create table 表名称( - 字段名 数据类型, - 字段名 数据类型 -); -``` - -说明:如果是最后一个字段,后面就用加逗号,因为逗号的作用是分割每个字段。 - -```sql -#创建学生表 -create table student( - id int, - name varchar(20) #说名字最长不超过20个字符 -); -``` - -3、查看定义好的表结构 - -```sql -desc 表名称; -desc student; -``` - -4、添加一条记录 - -```sql -insert into 表名称 values(值列表); - -#添加两条记录到student表中 -insert into student values(1,'张三'); -insert into student values(2,'李四'); -``` - -5、查看一个表的数据 - -```sql -select * from 表名称; -``` - -6、删除表 - -```sql -drop table 表名称; -#删除学生表 -drop table student; -``` - -# 作业: - -## 第1题 - -1、创建数据库test01_market - -```sql -CREATE DATABASE test01_market -``` - -指定对哪个数据库进行操作 - -```sql -USE test01_market -``` - -2、创建表格customers - -| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date | - -```sql -CREATE TABLE customers( - c_num INT(11), - c_name VARCHAR(50), - c_contact VARCHAR(50), - c_city VARCHAR(50), - c_birth DATE -); -``` - - - -**要求3:**将c_contact字段移动到c_birth字段后面 - -```sql -ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth; -``` - - - -**要求4:**将c_name字段数据类型改为 varchar(70) - -```sql -ALTER TABLE customers MODIFY c_name VARCHAR(70); -``` - - - -**要求5:**将c_contact字段改名为c_phone - -```sql -ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); -``` - - - -**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -```sql -ALTER TABLE customers ADD c_gender CHAR(1) AFTER c_name; -``` - - - -**要求7:**将表名改为customers_info - -```sql -ALTER TABLE customers RENAME customers_info; -``` - - - -**要求8:**删除字段c_city - -```sql -ALTER TABLE customers_info DROP c_city ; -``` - - - -## 第2题 - -1、创建数据库test02_library - -```sql -CREATE DATABASE test02_library -``` - -指定对哪个数据库进行操作 - -```sql -use test02_library; -``` - -2、创建表格books - -| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------- | -------- | ------------- | -------- | ---- | -| b_id | 书编号 | int(11) | 否 | 是 | -| b_name | 书名 | varchar(50) | 否 | 否 | -| authors | 作者 | varchar(100) | 否 | 否 | -| price | 价格 | float | 否 | 否 | -| pubdate | 出版日期 | year | 否 | 否 | -| note | 说明 | varchar(100) | 是 | 否 | -| num | 库存 | int(11) | 否 | 否 | - -```sql -create table books( -b_id int(11), -b_name varchar(50), -authors varchar(100), -price float, -pubdate year, -note varchar(100), -num int(11) -); -``` - -3、向books表中插入记录 - -1) 指定所有字段名称插入第一条记录 - -```sql -insert into books (b_id,b_name,authors,price,pubdate,note,num) values (1,'TalofAAA','Dickes',23,'1995','nove1',11); -``` - -2)不指定字段名称插入第二记录 - -```sql -insert into books values (2,'EmmaT','janelure',35,'1993','joke',22); -``` - -3)同时插入多条记录(剩下的所有记录) - -| b_id | b_name | authors | price | pubdate | note | num | -| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -```sql -insert into books values (3,'StoryofJane','JaneTim',40,'2001','novel',0),(4,'LoveyDay','GeorgeByron',20,'2005','novel',30),(5,'Oldland','HonoreBlade',30,'2010','law',0),(6,'TheBattle','UptonSara',30,'1999','medicine',40),(7,'RoseHood','Richardhaggard',28,'2008','cartoon',28); --- -``` - -4、将小说类型(novel)的书的价格都增加5。 - -```sql -update books set price = price+5 where note='novel'; -``` - -5、将名称为EmmaT的书的价格改为40。 - -```sql -update books set price = 40 where b_name='EmmaT'; -``` - -6、删除库存为0的记录 - -```sql -delete from books where num=0; -``` - - - -## 第3题 - -1、创建数据库test03_bookstore - -```sql -create database test03_bookstore charset utf8; -``` - -指定对哪个数据库进行操作 - -```sql -use test03_bookstore; -``` - -2、创建book表 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| sales | int(11) | NO | | NULL | | -| stock | int(11) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -```sql -create table book( -id int(11), -title varchar(100), -author varchar(100), -price double(11,2), -sales int(11), -stock int(11), -img_path varchar(100) -); -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------------+------------+-------+-------+-------+----------------------------+ -| id | title | author | price | sales | stock | img_path | -+----+-------------+------------+-------+-------+-------+-----------------------------+ -| 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | -| 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | -+----+---------------+------------+-------+-------+-------+----------------------------+ -``` - -```sql -insert into book values (1,'解忧杂货店','东野圭吾',27.2,102,98,'upload/books/解忧杂货店.jpg'),(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg'); -``` - -3、创建用户表users,并插入数据 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| username | varchar(100) | NO | UNI | NULL | | -| password | varchar(100) | NO | | NULL | | -| email | varchar(100) | YES | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -```sql -create table users( -id int(11), -unername varchar(100), -password varchar(100), -email varchar(100) -); -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+----------+----------------------------------+--------------------+ -| id | username | password | email | -+----+----------+----------------------------------+--------------------+ -| 1 | admin | 112233 | admin@mxdx.com | -+----+----------+----------------------------------+--------------------+ -``` - -4、创建订单表orders - -```mysql -+--------------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+--------------+--------------+------+-----+---------+-------+ -| id | varchar(100) | NO | PRI | NULL | | -| order_time | datetime | NO | | NULL | | -| total_count | int(11) | NO | | NULL | | -| total_amount | double(11,2) | NO | | NULL | | -| state | int(11) | NO | | NULL | | -| user_id | int(11) | NO | MUL | NULL | | -+--------------+--------------+------+-----+---------+-------+ -``` - -```sql -create table orders( -id varchar(100), -order_time datetime, -total_count int(11), -total_amount double(11,2), -state int(11), -user_id int(11) -); -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----------------+---------------------+-------------+--------------+-------+---------+ -| id | order_time | total_count | total_amount | state | user_id | -+----------------+---------------------+-------------+--------------+-------+---------+ -| 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | -+----------------+---------------------+-------------+--------------+-------+---------+ -``` - -5、创建订单明细表order_items - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| count | int(11) | NO | | NULL | | -| amount | double(11,2) | NO | | NULL | | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -| order_id | varchar(100) | NO | MUL | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -```sql -create table order_items( -id int(11), -count int(11), -amount double(11,2), -title varchar(100), -author varchar(100), -price double(11,2), -img_path varchar(100), -order_id varchar(100) -); -``` - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------+--------+---------+---------+-------+----------------+----------------+ -| id |count| amount| title | author | price | img_path | order_id | -+----+-------+--------+------------+----------+-------+----------------+----------------+ -| 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | -| 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | -+----+-------+--------+------------+----------+-------+------------+----------------+ -``` - diff --git "a/51 \347\250\213\350\210\234/20230221 DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274.md" "b/51 \347\250\213\350\210\234/20230221 DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274.md" deleted file mode 100644 index c54ca9e2595899e3be8511d5fec2fd5bc8a469d9..0000000000000000000000000000000000000000 --- "a/51 \347\250\213\350\210\234/20230221 DDL\345\222\214DML_\345\273\272\350\241\250\344\270\216\345\241\253\345\200\274.md" +++ /dev/null @@ -1,519 +0,0 @@ -# 笔记 - -## MySQL约束 - -约束:主键、唯一、非空、默认、自增、外键 - -#### 主键约束 - -1. 关键字是primary key -2. 特点:每一个表当中只能有一个主键约束 -3. 主键约束的字段值不允许为null值 -4. 不允许重复 - -解决方法.1:单独使用一个id列当主键 - -解决方法2:复合主键 - -```sql -create table xuanke( - sid int, - cid int, - score int, - primary key(sid,cid) #它俩组合不能为 null ,并且唯一 -); -``` - -建表后增加约束 - -```sql -alter table 表名称 add primary key(字段列表); -``` - -如果是一个字段,就是一个字段是主键 (字段列表)如果是多个字段,就是复合主键 - -如果想要删除主键约束 - -```sql -alter table 表名称 drop primary key; -alter table student dtop primary key; -``` - -#### 唯一键约束 - -1. 关键字:unique key -2. 特点:允许为null -3. 不能重复 -4. 一个表可以有多个唯一键约束 - -建表后增加唯一键约束 - -```sql -alter table 表名称 add unique key (字段列表); -alter table student add unique key (sname); -``` - -如果用语句删除唯一键约束 - -```sql -alter table 表名称 drop index 索引名; -``` - -#### 非空约束 - -```sql -not null # 不允许为空 -``` - -#### 默认值约束 - -如果某个字段,在添加数据时未指定值时,希望不要用null处理而是按照一个默认值处理,就可以使用默认值约束 - -```sql -default -``` - -删除score的非空约束 - -```sql -alter table student modify score int; -``` - -增加非空约束 - -```sql -alter table student modify score int not null; -``` - -删除gender的默认值约束 保留非空约束 - -```sql -alter table student modify gender enum('男','女') not null; -``` - -#### 检查约束 - -MySQL5.7不支持check约束,在MySQL中开始支持check约束 - -#### 外键约束 - -约束俩个表的关系,或者是一个表的俩个字段之间的关系 - -(1)主表(父表)和从表(子表) 主表:被依赖,被参考 从表:依赖别人的,参考别人的 - -例如:学生表、课程表、选课表 选课表中的学号,它的值是依赖于学生表的学号。 选课表是从表, 学生表是主表。 选课表中的课程编号,它的值是依赖于课程表的课程编号。 选课表是从表, 课程表示主表。 - -(2)外键的建立和指定要在从表中定义 (3)关键字 foreign key (4)格式 - -```sql -foreign key (从表的字段) references 主表(被依赖字段[主键]) -``` - -(5)要求 A:主表必须先存在 B:主表被依赖字段必须有索引,所以通常是主键列或唯一键列等才能作为被依赖字段。 C:删除表时,要么先删除从表,再删除主表,要么先解除外键约束,然后各自删除。 D:从(子)表的依赖字段的数据,必须在主(父)表被依赖字段中选择。 添加和修改都是这样的。 E:主(父)表被依赖字段的数据不能轻易的删除和修改,要看是否被引用 - -```sql -外键约束等级为 on update/delete cascade /(set null) -``` - -7、自增属性 维护某个字段的值自动增长的一个属性。 它的要求: (1)一个表最多只能有一个字段是自增的 (2)自增的字段必须是整数类型 (3)自增的字段必须是键约束的字段(通常是主键、唯一键) - -自增字段赋值为null和0的时候,会自增, 如果赋值为其他的值,按照你指定的值来。 - -```sql -ALTER TABLE 表名称 AUTO_INCREMENT = 起始值; -``` - -# 作业 - -## 第1题 - -1、创建数据库test01_company - -```sql -CREATE DATABASE IF NOT EXISTS test01_company; -``` - -使用库 - -```sql -USE test01_company; -``` - -2、创建表格offices - -```sql -CREATE TABLE IF NOT EXISTS offiscs( -officeCode INT, -city varchar(30), -address varchar(50), -country varchar(50), -postalCode varchar(25) -); -``` - -| 字段名 | 数据类型 | -| ---------- | ----------- | -| officeCode | int | -| city | varchar(30) | -| address | varchar(50) | -| country | varchar(50) | -| postalCode | varchar(25) | - -3、创建表格employees - -```sql -CREATE TABLE IF NOT EXISTS employees( - empNum int(11), - lastName varchar(50), - firstName varchar(50), - mobile varchar(25), - `code` int, - jobTitle varchar(50), - birth date, - Note varchar(255), - Sex varchar(5) -); -``` - -| 字段名 | 数据类型 | -| ------------- | ---------------------------- | -| empNum | int(11) | -| lastName | varchar(50) | -| firstName | varchar(50) | -| mobile | varchar(25) | -| code | int | -| jobTitle | varchar(50) | -| birth | date | -| Note | varchar(255) | -| Sex | varchar(5) | - -**要求4:**将表employees的mobile字段修改到code字段后面。 - -```sql -ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER `code`; -``` - -**要求5:**将表employees的birth字段改名为birthday; - -```sql -ALTER TABLE employees CHANGE birth birthday date; -``` - -**要求6:**修改sex字段,数据类型为char(1)。 - -```sql -ALTER TABLE employees MODIFY sex char(1); -``` - -**要求7:**删除字段note; - -```sql -ALTER TABLE employees DROP note; -``` - -**要求8:**增加字段名favoriate_activity,数据类型为varchar(100); - -```SQL -ALTER TABLE employees ADD favoriate_activity varchar(100); -``` - - - -**要求9:**将表employees的名称修改为 employees_info - -```mysql -ALTER TABLE employees RENAME employees_info; -``` - - - -## 第2题 - -1、创建数据库test02db - -```sql -create database test02db; -``` - -```sql -use test02db; -``` - -2、创建表格pet - -| 字段名 | 字段说明 | 数据类型 | -| ------- | -------- | ----------- | -| name | 宠物名称 | varchar(20) | -| owner | 宠物主人 | varchar(20) | -| species | 种类 | varchar(20) | -| sex | 性别 | char(1) | -| birth | 出生日期 | year | -| death | 死亡日期 | year | - -```sql -create table pet( - name varchar(20), - owner varchar(20), - species varchar(20), - sex char(1), - birth year, - death year -); -``` - -3、添加记录 - -| name | owner | species | sex | birth | death | -| ------ | ------ | ------- | ---- | ----- | ----- | -| Fluffy | harold | Cat | f | 2003 | 2010 | -| Claws | gwen | Cat | m | 2004 | | -| Buffy | | Dog | f | 2009 | | -| Fang | benny | Dog | m | 2000 | | -| bowser | diane | Dog | m | 2003 | 2009 | -| Chirpy | | Bird | f | 2008 | | - -```sql -insert into pet values -('Fluffy','harold','Cat','f',2003,2010), -('Claws','gwen','Cat','m',2004,null), -('Buffy',null,'Dog','f',2009,null), -('Fang','benny','Dog','m',2000,null), -('bowser','diane','Dog','m',2003,2009), -('Chirpy',null,'Bird','f',2008,null); -``` - -4、 添加字段主人的生日owner_birth。 - -```sql -alter table pet add owner_birth date; -``` - -5、 将名称为Claws的猫的主人改为kevin - -```sql -update pet set name = 'kevin' where name = 'Claws'; -insert into pet(owner) values (gwen) where name='kevin'; -``` - -6、 将没有死的狗的主人改为duck - -```sql -update pet set owner = 'duck' where death =name is null; -``` - -7、 查询没有主人的宠物的名字; - -```sql -select species from pet where owner = name is null; -``` - -8、 查询已经死了的cat的姓名,主人,以及去世时间; - -```sql -select `name`,`owner`,death from pet where death = name is not null and species = 'cat'; -``` - -9、 删除已经死亡的狗 - -```sql -delete from pet where death = name is not null and species = 'dog'; -``` - -10、查询所有宠物信息 - -```sql -select * from pet; -``` - -## 第3题 - -1、创建数据库:test03_company - -```sql -create database test03_company charset utf8; -``` - -2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - -A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - -```mysql -use test03_company ; -create table department( - depid int primary key auto_increment, - depname char(10) not null unique key, - deinfo varchar(200) -) -``` - -B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - -* ​ 雇员编号为主键; -* ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); -* ​ 性别默认为男; - -```mysql -create table employee ( - empid int primary key auto_increment, - name varchar(10) not null, - sex enum('男','女') not null default '男', - title varchar(10), - birthday date, - depid int foreign key references department(depid) -) -``` - -C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - -3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) - -```sql -CREATE table salary( -empid int PRIMARY key auto_increment, -basesalary VARCHAR(50), -titlesalary VARCHAR(50), -deduction VARCHAR(50), -FOREIGN key (empid) REFERENCES employee(empid) -); -``` - -4、添加数据如下: - -部门表: - -| 部门编号 | 部门名称 | 部门简介 | -| -------- | -------- | ------------ | -| 111 | 生产部 | Null | -| 222 | 销售部 | Null | -| 333 | 人事部 | 人力资源管理 | - -```sql -insert into department VALUES(111,'生产部',null),(222,'销售部',null),(333,'人事部','人力资源管理'); -``` - - 雇员表: - -| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | -| -------- | ---- | ---- | ---------- | ---------- | ------------ | -| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | -| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | -| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | -| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | - -```sql -insert into employee VALUES(1001,'张三','男','高级工程师','1975-1-1',111),(1002,'李四','女','助工','1985-1-1',111),(1003,'王五','男','工程师','1978-11-11',222),(1004,'张六','男','工程师','1999-1-1',222); -``` - - 工资表: - -| 雇员编号 | 基本工资 | 职务工资 | 扣除 | -| -------- | -------- | -------- | ---- | -| 1001 | 2200 | 1100 | 200 | -| 1002 | 1200 | 200 | NULL | -| 1003 | 2900 | 700 | 200 | -| 1004 | 1950 | 700 | 150 | - -```sql -insert into salary VALUES(1001,2200,1100,200),(1002,1200,200,null),(1003,2900,700,200),(1004,1950,700,150); -``` - -## 第4题 - -1、创建一个数据库:test04_school - -```sql -drop database test04_school; -``` - -使用数据库 - -```sql -use test04_school; -``` - -2、创建如下表格 - -表1 Department表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | -| DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | -| DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | - -```sql -drop table Department; -create table Department( - DepNo int(10) primary key not null unique key comment '部门号', - DepName varchar(20) not null comment '部门名称', - DepNote varchar(50) comment '部门备注' -); -``` - -表2 Teacher表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| Number | 教工号 | int | 是 | 否 | 是 | 是 | -| Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | -| Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | -| Birth | 出生日期 | date | 否 | 否 | 否 | 否 | -| DepNo | 部门号 | int | 否 | 是 | 否 | 否 | -| Salary | 工资 | float | 否 | 否 | 否 | 否 | -| Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | - -```sql -create table Teacher( - Number int primary key not null unique key comment '教工号', - Name varchar(30) not null comment '姓名', - Sex varchar(4) comment '性别', - Birth date comment '出生日期', - DepNo int comment '部门号', - Salary float comment '工资', - Address varchar(100) comment '家庭住址', - foreign key (DepNo) references Department (DepNo) -); -``` - -3、添加记录 - -| **DepNo** | **DepName** | **DepNote** | -| --------- | ----------- | ------------------ | -| 601 | 软件技术系 | 软件技术等专业 | -| 602 | 网络技术系 | 多媒体技术等专业 | -| 603 | 艺术设计系 | 广告艺术设计等专业 | -| 604 | 管理工程系 | 连锁经营管理等专业 | - -```sql -insert into Department values(601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'), -(603,'艺术设计系','广告艺术设计等专业'),(604,'管理工程系','连锁经营管理等专业'); -``` - -| **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | -| ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | -| 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | -| 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | -| 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | -| 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | -| 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | - -```sql -desc Teacher; -insert into Teacher values -(2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'), -(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'), -(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'), -(2004,'James','女','1980-10-20',602,3500,'四川省成都市'), -(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); -``` - -4、用SELECT语句查询Teacher表的所有记录。 - -```mysql -select * from Teacher; -``` - - - - - diff --git "a/51 \347\250\213\350\210\234/20230223 \344\275\234\344\270\2323_\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" "b/51 \347\250\213\350\210\234/20230223 \344\275\234\344\270\2323_\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" deleted file mode 100644 index af53087acce1b0ed985a95924ac22b8c1b98a64c..0000000000000000000000000000000000000000 --- "a/51 \347\250\213\350\210\234/20230223 \344\275\234\344\270\2323_\345\237\272\347\241\200\346\237\245\350\257\242_\350\277\220\347\256\227\347\254\246.md" +++ /dev/null @@ -1,595 +0,0 @@ -# 笔记 - -## SELECT语句 - -SELECT语句是用于查看计算结果、或者查看从数据表中筛选出的数据的。 - -SELECT语句的基本语法: - -```java -SELECT 常量; -SELECT 表达式; -SELECT 函数; -``` - -例如: - -```java -SELECT 1; -SELECT 9/2; -SELECT NOW(); -``` - -如果要从数据表中筛选数据,需要加FROM子句。FROM指定数据来源。字段列表筛选列。 - -```java -SELECT 字段列表 FROM 表名称; -``` - -如果要从数据表中根据条件筛选数据,需要加FROM和WHERE子句。WHERE筛选行。 - -```java -SELECT 字段列表 FROM 表名称 WHERE 条件; -``` - - - -## 使用别名 - -在当前select语句中给某个字段或表达式计算结果,或表等取个临时名称,便于当前select语句的编写和理解。这个临时名称称为别名。 - -```mysql -select 字段名1 as "别名1", 字段名2 as "别名2" from 表名称 as 别名; -``` - -- 列的别名有空格时,请加双引号。**==列的别名==中没有空格时,双引号可以加也可以不加**。 -- ==**表的别名不能加双引号**==,表的别名中间不能包含空格。 -- as大小写都可以,as也完全可以省略。 - - - -## 结果去重 - -mysql可以在查询结果中使用distinct关键字去重。 - -```mysql -select distinct 字段列表 from 表名称 【where 条件】; -``` - -```mysql -select distinct did from t_employee; -``` - - - -## 算术运算符(掌握) - -```mysql -加:+ - 在MySQL +就是求和,没有字符串拼接 -减:- -乘:* -除:/ div(只保留整数部分) - div:两个数相除只保留整数部分 - /:数学中的除 -模:% mod - -mysql中没有 +=等运算符 -``` - -```mysql -#select 表达式 -select 1+1; -update t_employee set salary = salary+100 where eid=27; - -select 9/2, 9 div 2; - -mysql> select 9/2, 9 div 2; -+--------+---------+ -| 9/2 | 9 div 2 | -+--------+---------+ -| 4.5000 | 4 | -+--------+---------+ -1 row in set (0.00 sec) - -select 9.5 / 1.5 , 9.5 div 1.5; - -mysql> select 9.5 / 1.5 , 9.5 div 1.5; -+-----------+-------------+ -| 9.5 / 1.5 | 9.5 div 1.5 | -+-----------+-------------+ -| 6.33333 | 6 | -+-----------+-------------+ -1 row in set (0.00 sec) - -select 9 % 2, 9 mod 2; -select 9.5 % 1.5 , 9.5 mod 1.5; - -select 'hello' + 'world'; -mysql> select 'hello' + 'world'; -+-------------------+ -| 'hello' + 'world' | -+-------------------+ -| 0 | -+-------------------+ -1 row in set, 2 warnings (0.00 sec) -``` - -## - -## 比较运算符(掌握) - -```mysql -大于:> -小于:< -大于等于:>= -小于等于:>= -等于:= 不能用于null判断 -不等于:!= 或 <> 不能用于null判断 -判断是null 用 is null 或 用 <=> null -判断不是null is not null - -``` - -```mysql -#查询薪资高于15000的员工姓名和薪资 -select ename,salary from t_employee where salary>15000; - -mysql> select ename,salary from t_employee where salary>15000; -+--------+--------+ -| ename | salary | -+--------+--------+ -| 孙洪亮 | 28000 | -| 贾宝玉 | 15700 | -| 黄冰茹 | 15678 | -| 李冰冰 | 18760 | -| 谢吉娜 | 18978 | -| 舒淇格 | 16788 | -| 章嘉怡 | 15099 | -+--------+--------+ -7 rows in set (0.00 sec) - -#查询薪资正好是9000的员工姓名和薪资 -select ename,salary from t_employee where salary = 9000; -select ename,salary from t_employee where salary == 9000;#错误,不支持== #注意Java中判断用==,mysql判断用= - -mysql> select ename,salary from t_employee where salary == 9000; -ERROR 1064 (42000): You have an error in your SQL syntax; - check the manual that corresponds to your MySQL server version for the right syntax to use near '== 9000' at line 1 - -#查询工作地址 work_place不是北京的 -select * from t_employee where work_place != '北京'; -select * from t_employee where work_place <> '北京'; - -#查询员工表中部门编号不是1 -select * from t_employee where did != 1; -select * from t_employee where did <> 1; - -#查询奖金比例是NULL -select * from t_employee where commission_pct = null; - -mysql> select * from t_employee where commission_pct = null; #无法用=null判断 -Empty set (0.00 sec) -#mysql中只要有null值参与运算和比较,结果就是null,底层就是0,表示条件不成立。 - -#查询奖金比例是NULL -select * from t_employee where commission_pct <=> null; -select * from t_employee where commission_pct is null; - -#查询“李冰冰”、“周旭飞”、“李易峰”这几个员工的信息 -select * from t_employee where ename in ('李冰冰','周旭飞','李易峰'); - -#查询部门编号为2、3的员工信息 -select * from t_employee where did in(2,3); - -#查询部门编号不是2、3的员工信息 -select * from t_employee where did not in(2,3); - -#查询薪资在[10000,15000]之间 -select * from t_employee where salary between 10000 and 15000; - -#查询姓名中第二个字是'冰'的员工 -select * from t_employee where ename like '冰'; #这么写等价于 ename='冰' -select * from t_employee where ename like '_冰%'; -#这么写匹配的是第二个字是冰,后面可能没有第三个字,或者有好几个字 - -update t_employee set ename = '王冰' where ename = '李冰冰'; - -select * from t_employee where ename like '_冰_'; -#这么写匹配的是第二个字是冰,后面有第三个字,且只有三个字 - -#查询员工的姓名、薪资、奖金比例、实发工资 -#实发工资 = 薪资 + 薪资 * 奖金比例 -select ename as 姓名, -salary as 薪资, -commission_pct as 奖金比例, -salary + salary * commission_pct as 实发工资 -from t_employee; - -#NULL在mysql中比较和计算都有特殊性,所有的计算遇到的null都是null。 -#实发工资 = 薪资 + 薪资 * 奖金比例 -select ename as 姓名, -salary as 薪资, -commission_pct as 奖金比例, -salary + salary * ifnull(commission_pct,0) as 实发工资 -from t_employee; -``` - -## 9.3 区间或集合范围比较运算符(掌握) - -```mysql -区间范围:between x and y - not between x and y -集合范围:in (x,x,x) - not in(x,x,x) - between ... and ... 结果包含两端的边界 -``` - -```mysql -#查询薪资在[10000,15000] -select * from t_employee where salary>=10000 && salary<=15000; -select * from t_employee where salary between 10000 and 15000; - -#查询籍贯在这几个地方的 -select * from t_employee where work_place in ('北京', '浙江', '江西'); - -#查询薪资不在[10000,15000] -select * from t_employee where salary not between 10000 and 15000; - -#查询籍贯不在这几个地方的 -select * from t_employee where work_place not in ('北京', '浙江', '江西'); -``` - -## - -## 模糊匹配比较运算符(掌握) - -%:代表任意个字符 - -_:代表一个字符,如果两个下划线代表两个字符 - -```mysql -#查询名字中包含'冰'字 -select * from t_employee where ename like '%冰%'; - -#查询名字以‘雷'结尾的 -select * from t_employee where ename like '%远'; - -#查询名字以’李'开头 -select * from t_employee where ename like '李%'; - -#查询名字有冰这个字,但是冰的前面只能有1个字 -select * from t_employee where ename like '_冰%'; -``` - -```mysql -#查询当前mysql数据库的字符集情况 -show variables like '%character%'; -``` - -## - -## 逻辑运算符(掌握) - -```mysql -逻辑与:&& 或 and -逻辑或:|| 或 or -逻辑非:! 或 not -逻辑异或: xor -``` - -```mysql -#查询薪资高于15000,并且性别是男的员工 -select * from t_employee where salary>15000 and gender='男'; -select * from t_employee where salary>15000 && gender='男'; - -select * from t_employee where salary>15000 & gender='男';#错误得不到值 &按位与 -select * from t_employee where (salary>15000) & (gender='男'); - -#查询薪资高于15000,或者did为1的员工 -select * from t_employee where salary>15000 or did = 1; -select * from t_employee where salary>15000 || did = 1; - -#查询薪资不在[15000,20000]范围的 -select * from t_employee where salary not between 15000 and 20000; -select * from t_employee where !(salary between 15000 and 20000); - -#查询薪资高于15000,或者did为1的员工,两者只能满足其一 -select * from t_employee where salary>15000 xor did = 1; -select * from t_employee where (salary>15000) ^ (did = 1); -``` - - - -## 关于null值的问题(掌握) - -```mysql -#(1)判断时 -xx is null -xx is not null -xx <=> null - -#(2)计算时 -ifnull(xx,代替值) 当xx是null时,用代替值计算 -``` - -**所有的计算遇到的null都是null** - -```mysql -#查询奖金比例为null的员工 -select * from t_employee where commission_pct = null; #失败 -select * from t_employee where commission_pct = NULL; #失败 -select * from t_employee where commission_pct = 'NULL'; #失败 - -select * from t_employee where commission_pct is null; #成功 -select * from t_employee where commission_pct <=> null; #成功 <=>安全等于 -``` - -```mysql -#查询员工的实发工资,实发工资 = 薪资 + 薪资 * 奖金比例 -select ename , salary + salary * commission_pct "实发工资" from t_employee; #失败,当commission_pct为null,结果都为null - -select ename ,salary , commission_pct, salary + salary * ifnull(commission_pct,0) "实发工资" from t_employee; -``` - -## - -## 位运算符(了解) - -基本不用,知道一下 - -```mysql -左移:<< -右移:>> -按位与:& -按位或:| -按位异或:^ -按位取反:~ -``` - -# - -# 作业 - -## 第1题:员工表 - -```mysql -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - - - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - -```mysql -CREATE DATABASE test_1 charset utf8; -USE test_1; -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - - - -**要求1:**查询出薪资在12000~13000之间的员工信息。 - -```mysql -select * from employee where salary between 12000 and 13000; -``` - - - -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -```mysql -select id,name,addr from employee where name like '刘%'; -``` - - - -**要求3:**将“李四”的家庭住址改为“广东韶关” - -```mysql -UPDATE employee SET addr ='广东韶关' WHERE name ='李四'; -``` - - - -**要求4:**查询出名字中带“小”的员工 - -```mysql -SELECT * FROM employee WHERE name like '%小%'; -``` - - - -**要求5:**查询出薪资高于11000的男员工信息 - -```mysql -SELECT * FROM employee WHERE salary >11000 and sex = '男'; -``` - - - -**要求6:**查询没有登记电话号码的员工 - -```mysql -SELECT * FROM employee WHERE tel is NULL; -``` - - - -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -```mysql -SELECT * FROM employee WHERE salary >12000 or addr = '广东深圳'or addr='广东广州'; -``` - - - -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - -```mysql -SELECT name 姓名,salary*12 年薪 FROM employee ; -``` - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -``` - -```mysql -CREATE DATABASE test_1 charset utf8; -USE test_1; -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - - - -**要求1:** 查询大国 的国家名称、人口和面积。 - -```mysql -SELECT name, area,population FROM countries_info WHERE area >=3000000 or population >=25000000; -``` - - - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) - -- 人口至少为 2500 万(即 25000000) - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -```mysql -SELECT * FROM countries_info WHERE continent = 'Asia'; -``` - - - -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -```mysql -SELECT * FROM countries_info WHERE area <10000 and population <100000; -``` - - - -**要求4:**查询国家名字中包含“o“字母的国家信息 - -```mysql -SELECT * FROM countries_info WHERE name like '%o%'; -``` - - - -**要求5:**查询GDP值超过10000000000的国家信息 - -```mysql -SELECT * FROM countries_info WHERE gdp >10000000000; -``` - - - -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -```mysql -SELECT name 国家名,population 人口,gdp gdp值,gdp/population 人均贡献GDP值 FROM countries_info ; -``` - - - -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - -```mysql -SELECT * FROM countries_info WHERE gdp/population; -``` - - - -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -```mysql -SELECT name 国家名,area 面积,population 人口,area/population 人均国土面积值 FROM countries_info ; -``` - diff --git "a/52\347\250\213\345\270\205\347\277\224/3.2\344\275\234\344\270\232.md" "b/52\347\250\213\345\270\205\347\277\224/3.2\344\275\234\344\270\232.md" deleted file mode 100644 index 4cfb59fda160d40b274b23b40b1961b8864897ed..0000000000000000000000000000000000000000 --- "a/52\347\250\213\345\270\205\347\277\224/3.2\344\275\234\344\270\232.md" +++ /dev/null @@ -1,130 +0,0 @@ -| **create** **database** class2 charset utf8; | | | -| -------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| | [3](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_3) | use class2; | -| | [4](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_4) | | -| | [5](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_5) | **CREATE** **TABLE** `student` ( | -| | [6](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_6) | `Sno` varchar(20) **NOT** **NULL**, | -| | [7](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_7) | `Sname` varchar(20) **NOT** **NULL**, | -| | [8](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_8) | `Ssex` varchar(20) **NOT** **NULL**, | -| | [9](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_9) | `Sbirthday` datetime **DEFAULT** **NULL**, | -| | [10](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_10) | `Class` varchar(20) **DEFAULT** **NULL**, | -| | [11](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_11) | **PRIMARY** **KEY** (`Sno`), | -| | [12](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_12) | **KEY** `Sname` (`Sname`) | -| | [13](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_13) | ) ENGINE=InnoDB **DEFAULT** CHARSET=utf8; | -| | [14](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_14) | | -| | [15](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_15) | **CREATE** **TABLE** `course` ( | -| | [16](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_16) | `Cno` varchar(20) **NOT** **NULL**, | -| | [17](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_17) | `Cname` varchar(20) **NOT** **NULL**, | -| | [18](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_18) | `Tno` varchar(20) **NOT** **NULL**, | -| | [19](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_19) | **PRIMARY** **KEY** (`Cno`), | -| | [20](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_20) | **KEY** `Tn` (`Tno`), | -| | [21](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_21) | **KEY** `Cname` (`Cname`), | -| | [22](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_22) | **KEY** `Cno` (`Cno`,`Tno`), | -| | [23](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_23) | **CONSTRAINT** `Tn` **FOREIGN** **KEY** (`Tno`) **REFERENCES** `teacher` (`Tno`) | -| | [24](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_24) | ) ENGINE=InnoDB **DEFAULT** CHARSET=utf8; | -| | [25](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_25) | | -| | [26](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_26) | **CREATE** **TABLE** `score` ( | -| | [27](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_27) | `Sno` varchar(20) **NOT** **NULL**, | -| | [28](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_28) | `Cno` varchar(20) **NOT** **NULL**, | -| | [29](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_29) | `Degree` decimal(4,1) **DEFAULT** **NULL**, | -| | [30](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_30) | **KEY** `Sn` (`Sno`), | -| | [31](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_31) | **KEY** `Cn` (`Cno`), | -| | [32](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_32) | **CONSTRAINT** `Cn` **FOREIGN** **KEY** (`Cno`) **REFERENCES** `course` (`Cno`), | -| | [33](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_33) | **CONSTRAINT** `Sn` **FOREIGN** **KEY** (`Sno`) **REFERENCES** `student` (`Sno`) | -| | [34](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_34) | ) ENGINE=InnoDB **DEFAULT** CHARSET=utf8; | -| | [35](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_35) | | -| | [36](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_36) | **CREATE** **TABLE** `teacher` ( | -| | [37](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_37) | `Tno` varchar(20) **NOT** **NULL**, | -| | [38](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_38) | `Tname` varchar(20) **NOT** **NULL**, | -| | [39](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_39) | `Tsex` varchar(20) **NOT** **NULL**, | -| | [40](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_40) | `Tbirthday` datetime **DEFAULT** **NULL**, | -| | [41](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_41) | `Prof` varchar(20) **DEFAULT** **NULL**, | -| | [42](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_42) | `Depart` varchar(20) **NOT** **NULL**, | -| | [43](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_43) | **PRIMARY** **KEY** (`Tno`), | -| | [44](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_44) | **KEY** `Depart` (`Depart`) | -| | [45](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_45) | ) ENGINE=InnoDB **DEFAULT** CHARSET=utf8; | -| | [46](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_46) | | -| | [47](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_47) | **insert** **into** Student **values** | -| | [48](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_48) | (108,'曾华','男','1977-9-1',95033), | -| | [49](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_49) | (105,'匡明','男','1975-10-2',95031), | -| | [50](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_50) | (107,'王丽','女','1976-1-23',95033), | -| | [51](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_51) | (101,'李军','男','1976-2-20',95033), | -| | [52](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_52) | (109,'王芳','女','1975-2-10',95031), | -| | [53](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_53) | (103,'陆君','男','1974-6-3',95031); | -| | [54](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_54) | | -| | [55](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_55) | **insert** **into** course **values** | -| | [56](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_56) | (3-105,'计算机导论',825), | -| | [57](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_57) | (3-245,'操作系统',804), | -| | [58](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_58) | (6-166,'数字电路',856), | -| | [59](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_59) | (9-888,'高等数学',831); | -| | [60](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_60) | | -| | [61](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_61) | **insert** **into** score **values** | -| | [62](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_62) | (103,'3-245',86), | -| | [63](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_63) | (105,'3-245',75), | -| | [64](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_64) | (109,'3-245',68), | -| | [65](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_65) | (103,'3-105',92), | -| | [66](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_66) | (105,'3-105',88), | -| | [67](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_67) | (109,'3-105',76), | -| | [68](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_68) | (101,'3-105',64), | -| | [69](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_69) | (107,'3-105',91), | -| | [70](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_70) | (108,'6-180',78), | -| | [71](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_71) | (101,'6-180',85), | -| | [72](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_72) | (107,'6-166',79), | -| | [73](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_73) | (108,'6-166',81); | -| | [74](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_74) | | -| | [75](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_75) | **insert** **into** teacher **values** | -| | [76](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_76) | (804,'李诚','男','1958-12-2','副教授','计算机系'), | -| | [77](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_77) | (856,'张旭','男','1969-3-12','讲师','电子工程系'), | -| | [78](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_78) | (825,'王萍','女','1972-5-5','助教','计算机系'), | -| | [79](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_79) | (831,'刘冰','女','1958-12-2','助教','电子工程系'); | -| | [80](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_80) | | -| | [81](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_81) | #1.查询所有学生,都学了哪些课程,要显示学生信息和课程信息 | -| | [82](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_82) | **select** * **from** student,course,score **where** score.cno = course.Cno **and** student.sno=score.sno; | -| | [83](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_83) | #2.查询没有学生的教师的所有信息 | -| | [84](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_84) | **select** * **from** teacher **where** depart='电子工程系'; | -| | [85](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_85) | #① 查询Score表中的最高分的学生学号和课程号。 | -| | [86](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_86) | **select** sno,cno **from** score **where** degree='91'; | -| | [87](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_87) | #② 查询所有学生的Sname、Cno和Degree列。 | -| | [88](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_88) | **select** student.sname,course.cno,score.degree **from** student, course, score **where** score.cno = course.Cno **and** student.sno=score.sno ; | -| | [89](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_89) | #③ 查询所有学生的Sno、Cname和Degree列。 | -| | [90](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_90) | **select** student.Sno,course.cname,score.degree **from** student, course, score **where** score.cno = course.Cno **and** student.sno=score.sno ; | -| | [91](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_91) | #④ 查询所有学生的Sname、Cname和Degree列。 | -| | [92](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_92) | **select** student.sname,course.cname,score.degree **from** student, course, score **where** score.cno = course.Cno **and** student.sno=score.sno ; | -| | [93](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_93) | #⑤ 查询“95033”班学生的平均分。 | -| | [94](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_94) | **select** **avg**(degree) **from** score,student **where** student.sno=score.sno **and** student.**class**='95033'; | -| | [95](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_95) | #⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 | -| | [96](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_96) | **select** * **from** student,score **where** cno='3-105' **and** Degree>76 **and** student.sno=score.sno; | -| | [97](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_97) | **select** * **from** score; | -| | [98](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_98) | #⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 | -| | [99](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_99) | | -| | [100](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_100) | #⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 | -| | [101](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_101) | **select** * **from** student,score **where** degree>76 **and** cno='3-105' **and** student.sno=score.sno; | -| | [102](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_102) | #⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 | -| | [103](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_103) | **select** sno,sname,Sbirthday **from** student **where** Sbirthday='1977-9-1'; | -| | [104](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_104) | #⑩ 查询“张旭“教师任课的学生成绩。 | -| | [105](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_105) | **select** sname,cname,degree **from** student,score,teacher,course **where** tname='张旭' **and** student.sno=score.sno **and** score.cno = course.Cno **and** teacher.Tno=course.Tno; | -| | [106](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_106) | #⑪ 查询选修某课程的同学人数多于5人的教师姓名。 | -| | [107](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_107) | #**select** tname,**count**(cno) a **from** score,teacher, student,course **where** a>=5 ; | -| | [108](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_108) | #⑫ 查询出“计算机系“教师所教课程的成绩表。 | -| | [109](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_109) | **select** degree,depart **from** score **LEFT** **JOIN** teacher **on** depart='计算机系' ; | -| | [110](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_110) | #⑬ 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 | -| | [111](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_111) | | -| | [112](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_112) | #⑭ 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 | -| | [113](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_113) | | -| | [114](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_114) | #⑮ 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. | -| | [115](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_115) | | -| | [116](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_116) | #⑯ 查询成绩比该课程平均成绩低的同学的成绩表。 | -| | [117](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_117) | | -| | [118](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_118) | #⑰ 查询所有任课教师的Tname和Depart. | -| | [119](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_119) | | -| | [120](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_120) | #⑱ 查询所有未讲课的教师的Tname和Depart. | -| | [121](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_121) | | -| | [122](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_122) | #⑲ 查询“男”教师及其所上的课程。 | -| | [123](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_123) | | -| | [124](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_124) | #⑳ 查询最高分同学的Sno、Cno和Degree列。 | -| | [125](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_125) | | -| | [126](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_126) | #21 查询和“李军”同性别的所有同学的Sname. | -| | [127](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_127) | | -| | [128](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_128) | #22 查询和“李军”同性别并同班的同学Sname. | -| | [129](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_129) | | -| | [130](https://gitee.com/lmjli-mingjian/mysql-base/commit/8921e53e5325aa87ef9f74ba882ddc0715311a45#10248c5ca78552391319fe82d4194ad3e763d825_0_130) | #23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 | \ No newline at end of file diff --git "a/52\347\250\213\345\270\205\347\277\224/DQL\344\275\234\344\270\232.md" "b/52\347\250\213\345\270\205\347\277\224/DQL\344\275\234\344\270\232.md" deleted file mode 100644 index 46348f1d4f5002d18c08ad2bd7613b9b9032d269..0000000000000000000000000000000000000000 --- "a/52\347\250\213\345\270\205\347\277\224/DQL\344\275\234\344\270\232.md" +++ /dev/null @@ -1,108 +0,0 @@ -| ```mysql | | | -| -------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -| | [2](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_2) | ## 第1题:员工表 | -| | [3](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_3) | | -| | [4](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_4) | mysql | -| | [5](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_5) | drop table if exists `employee`; | -| | [6](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_6) | create database test charset utf8; | -| | [7](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_7) | #创建employee表 | -| | [8](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_8) | use test; | -| | [9](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_9) | CREATE TABLE employee( | -| | [10](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_10) | id INT, | -| | [11](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_11) | `name` VARCHAR(20), | -| | [12](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_12) | sex VARCHAR(20), | -| | [13](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_13) | tel VARCHAR(20), | -| | [14](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_14) | addr VARCHAR(50), | -| | [15](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_15) | salary FLOAT | -| | [16](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_16) | ); | -| | [17](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_17) | | -| | [18](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_18) | #添加信息 | -| | [19](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_19) | INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES | -| | [20](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_20) | (10001,'张一一','男','13456789000','广东韶关',10010.58), | -| | [21](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_21) | (10002,'刘小红','女','13454319000','广东江门',12010.21), | -| | [22](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_22) | (10003,'李四','男','0751-1234567','广东佛山',10040.11), | -| | [23](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_23) | (10004,'刘小强','男','0755-5555555','广东深圳',15010.23), | -| | [24](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_24) | (10005,'王艳','男',NULL,'广东广州',14050.16); | -| | [25](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_25) | | -| | [26](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_26) | \| **id** \| **name** \| **sex** \| **tel** \| **addr** \| **salary** \| | -| | [27](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_27) | \| ------ \| -------- \| ------- \| ------------ \| -------- \| ---------- \| | -| | [28](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_28) | \| 10001 \| 张一一 \| 男 \| 13456789000 \| 广东韶关 \| 10010.58 \| | -| | [29](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_29) | \| 10002 \| 刘小红 \| 女 \| 13454319000 \| 广东江门 \| 12010.21 \| | -| | [30](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_30) | \| 10003 \| 李四 \| 男 \| 0751-1234567 \| 广东佛山 \| 10040.11 \| | -| | [31](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_31) | \| 10004 \| 刘小强 \| 男 \| 0755-5555555 \| 广东深圳 \| 15010.23 \| | -| | [32](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_32) | \| 10005 \| 王艳 \| 女 \| NULL \| 广东广州 \| 14050.16 \| | -| | [33](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_33) | select * from employee; | -| | [34](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_34) | **要求1:**查询出薪资在12000~13000之间的员工信息。 | -| | [35](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_35) | select * from employee where salary between 12000 and 13000; | -| | [36](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_36) | **要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 | -| | [37](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_37) | select id,name,addr from employee where name like'刘%'; | -| | [38](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_38) | **要求3:**将“李四”的家庭住址改为“广东韶关” | -| | [39](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_39) | update employee set addr = '广东韶关' where name = '李四'; | -| | [40](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_40) | **要求4:**查询出名字中带“小”的员工 | -| | [41](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_41) | select * from employee where name like '%小%'; | -| | [42](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_42) | **要求5:**查询出薪资高于11000的男员工信息 | -| | [43](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_43) | select * from employee where salary > 11000 and sex ='男'; | -| | [44](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_44) | **要求6:**查询没有登记电话号码的员工 | -| | [45](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_45) | select * from employee where tel is null; | -| | [46](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_46) | **要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 | -| | [47](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_47) | select * from employee where sex ='男' and (salary > 12000 )or(addr in('广东深圳','广东广州')) ; | -| | [48](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_48) | **要求8:**查询每个员工的年薪,显示“姓名、年薪” | -| | [49](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_49) | select name '姓名',salary '底薪', salary * 12 '年薪' from employee; | -| | [50](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_50) | | -| | [51](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_51) | ## 第2题:国家信息表 | -| | [52](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_52) | | -| | [53](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_53) | countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 | -| | [54](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_54) | create database test2 charset utf8; | -| | [55](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_55) | use test2; | -| | [56](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_56) | DROP TABLE IF EXISTS `countries_info`; | -| | [57](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_57) | CREATE TABLE `countries_info`( | -| | [58](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_58) | `name` VARCHAR(100), | -| | [59](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_59) | `continent` VARCHAR(100), | -| | [60](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_60) | `area` INT, | -| | [61](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_61) | population INT, | -| | [62](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_62) | gdp BIGINT | -| | [63](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_63) | ); | -| | [64](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_64) | | -| | [65](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_65) | INSERT INTO countries_info VALUES | -| | [66](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_66) | ('Afghanistan','Asia',652230,25500100,20343000000), | -| | [67](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_67) | ('Albania','Europe',28748,2831741,12960000000), | -| | [68](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_68) | ('Algeria','Africa',2381741,37100000,188681000000), | -| | [69](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_69) | ('Andorra','Europe',468,78115,3712000000), | -| | [70](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_70) | ('Angola','Africa',1246700,20609294,100990000000); | -| | [71](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_71) | ``` | -| | [72](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_72) | 表数据样例: | -| | [73](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_73) | | -| | [74](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_74) | ```mysql | -| | [75](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_75) | +-------------+-----------+---------+------------+--------------+ | -| | [76](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_76) | \| name \| continent \| area \| population \| gdp \| | -| | [77](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_77) | +-------------+-----------+---------+------------+--------------+ | -| | [78](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_78) | \| Afghanistan \| Asia \| 652230 \| 25500100 \| 20343000000 \| | -| | [79](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_79) | \| Albania \| Europe \| 28748 \| 2831741 \| 12960000000 \| | -| | [80](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_80) | \| Algeria \| Africa \| 2381741 \| 37100000 \| 188681000000 \| | -| | [81](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_81) | \| Andorra \| Europe \| 468 \| 78115 \| 3712000000 \| | -| | [82](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_82) | \| Angola \| Africa \| 1246700 \| 20609294 \| 100990000000 \| | -| | [83](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_83) | +-------------+-----------+---------+------------+--------------+ | -| | [84](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_84) | select * from countries_info | -| | [85](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_85) | | -| | [86](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_86) | **要求1:** 查询大国 的国家名称、人口和面积。 | -| | [87](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_87) | | -| | [88](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_88) | 如果一个国家满足下述两个条件之一,则认为该国是 大国 : | -| | [89](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_89) | | -| | [90](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_90) | - 面积至少为 300万平方公里(即,3000000 km2) | -| | [91](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_91) | | -| | [92](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_92) | - 人口至少为 2500 万(即 25000000) | -| | [93](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_93) | select name,population,area from countries_info where area > 3000000 or population > 25000000; | -| | [94](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_94) | **要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 | -| | [95](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_95) | select * from countries_info where continent = 'Asia' ; | -| | [96](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_96) | **要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 | -| | [97](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_97) | select * from countries_info where area < 10000 and population < 100000; | -| | [98](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_98) | **要求4:**查询国家名字中包含“o“字母的国家信息 | -| | [99](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_99) | select * from countries_info where name like '%o%'; | -| | [100](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_100) | **要求5:**查询GDP值超过10000000000的国家信息 | -| | [101](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_101) | select * from countries_info where gdp > 10000000000; | -| | [102](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_102) | **要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” | -| | [103](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_103) | select name '国家名', population '人口', gdp 'GDP值',gdp/ population '人均贡献GDP值' from countries_info; | -| | [104](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_104) | **要求7:**查询人均贡献GDP值低于1000的国家信息。 | -| | [105](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_105) | select * from countries_info where gdp / population < 1000; | -| | [106](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_106) | **要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” | -| | [107](https://gitee.com/fang-zengxing/mysql-base/commit/79daf0a776910f6cdc1c09a5fdb7a40e1b7b6244#ab8c8689102a3c159b3c030567c88aadfed7d90d_0_107) | select name '国家名',area '面积', population '人口',area/ population '人均国土面积值' from countries_info; | \ No newline at end of file diff --git "a/52\347\250\213\345\270\205\347\277\224/\344\275\234\344\270\232.md" "b/52\347\250\213\345\270\205\347\277\224/\344\275\234\344\270\232.md" deleted file mode 100644 index b5b55cbd701c4104ea12a4ded514506fb2d10e3b..0000000000000000000000000000000000000000 --- "a/52\347\250\213\345\270\205\347\277\224/\344\275\234\344\270\232.md" +++ /dev/null @@ -1,40 +0,0 @@ -## 第一题 - - - -# 1、创建数据库test01_market; - -create DATABASE if not exists test01_market; -#2、创建表格customers -use test01_market; -drop table customers; -create TABLE customers( -c_num int(11), -c_name varchar(50), -c_contact varchar(50), -c_city varchar(50), -c_birth date -); -/*| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date |*/ - -**要求3:**将c_contact字段移动到c_birth字段后面 - -alter table customers MODIFY c_contact varchar(50) after c_birth; -#**要求4:**将c_name字段数据类型改为 varchar(70) -alter TABLE customers modify c_name varchar(70); -#**要求5:**将c_contact字段改名为c_phone -ALTER table customers CHANGE c_contact c_phone VARCHAR(50); -#****要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -show tables from test01_market; -alter table customers add c_gender char(1); -alter table customers MODIFY c_gender char(1) after c_name; -#**要求7:**将表名改为customers_info -alter table customers rename customers_info; -#**删除字段c_city -alter table customers_info drop c_city; \ No newline at end of file diff --git "a/52\347\250\213\345\270\205\347\277\224/\344\275\234\344\270\2322.md" "b/52\347\250\213\345\270\205\347\277\224/\344\275\234\344\270\2322.md" deleted file mode 100644 index 49d5e2fec0154bf0dd1d0fa40b14a1e37e621d55..0000000000000000000000000000000000000000 --- "a/52\347\250\213\345\270\205\347\277\224/\344\275\234\344\270\2322.md" +++ /dev/null @@ -1,347 +0,0 @@ -# 作业 -## 第一题 --- 1、创建数据库test01_company -CREATE database test01_company -use test01_company; --- 2、创建表格offices -create table offices( -officeCode int, -city varchar(30), -address varchar(50), -country varchar(50), -postalCode VARCHAR(25) - -); - -| -- | 字段名 | 数据类型 | -| ------------------------------------------------------------ | ---------- | ------------- | -| -- | officeCode | int | -| -- | city | varchar(30) | -| -- | address | varchar(50) | -| -- | country | varchar(50) | -| -- | postalCode | varchar(25) | -| -- | | | -| -- 3、创建表格employees | | | -| create table employees( | | | -| empNum int(11), | | | -| lastName VARCHAR(50), | | | -| firstName VARCHAR(50), | | | -| mobile VARCHAR(25), | | | -| `code` int, | | | -| jobTitle VARCHAR(50), | | | -| birth date, | | | -| Note VARCHAR(255), | | | -| Sex VARCHAR(5) | | | -| ); | | | -| -- | | | -| -- | 字段名 | 数据类型 | -| -- | --------- | ------------- | -| -- | empNum | int(11) | -| -- | lastName | varchar(50) | -| -- | firstName | varchar(50) | -| -- | mobile | varchar(25) | -| -- | code | int | -| -- | jobTitle | varchar(50) | -| -- | birth | date | -| -- | Note | varchar(255) | -| -- | Sex | varchar(5) | -| -- | | | -| -- **要求4:**将表employees的mobile字段修改到code字段后面。 | | | -| alter table employees modify mobile VARCHAR(25) after code; | | | -| -- | | | -| -- **要求5:**将表employees的birth字段改名为birthday; | | | -| alter table employees change birth birthday date; | | | -| -- | | | -| -- **要求6:**修改sex字段,数据类型为char(1)。 | | | -| alter table employees modify sex char(1); | | | -| -- | | | -| -- **要求7:**删除字段note; | | | -| alter table employees drop note; | | | -| -- | | | -| -- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); | | | -| alter table employees add favoriate_activity VARCHAR(100); | | | -| -- | | | -| -- **要求9:**将表employees的名称修改为 employees_info | | | -| alter table employees rename to employees_info; | | | -| -- | | | -| -- ```mysql | | | -| -- | | | -| -- ``` | | | -| -- | | | -| -- | | | -| -- | | | - -## 第二题 - - - --- 1、创建数据库test02db -create database test02db; - -use test02db; - --- 2、创建表格pet -drop table pet; -create table pet( -`name` VARCHAR(20), -`owner` VARCHAR(20), - species VARCHAR(20), - sex char(1), - birth year, - death year - -); - -| -- | 字段名 | 字段说明 | 数据类型 | -| ------------------------------------------------------- | ------- | -------- | ----------- | -| -- | name | 宠物名称 | varchar(20) | -| -- | owner | 宠物主人 | varchar(20) | -| -- | species | 种类 | varchar(20) | -| -- | sex | 性别 | char(1) | -| -- | birth | 出生日期 | year | -| -- | death | 死亡日期 | year | -| -- | | | | -| -- 3、添加记录 | | | | -| insert into pet values | | | | -| ('Fluffy','harold','Cat','f',2003,2010), | | | | -| ('Claws','gwen','Cat','m',2004,null), | | | | -| ('Buffy',null,'Dog','f',2009,null), | | | | -| ('Fang','benny','Dog','m',2000,null), | | | | -| ('bowser','diane','Dog','m',2003,2009), | | | | -| ('Chirpy',null,'Bird','f',2008,null); | | | | -| -- | | | | -| -- | name | owner | species | -| -- | ------ | ------ | ------- | -| -- | Fluffy | harold | Cat | -| -- | Claws | gwen | Cat | -| -- | Buffy | | Dog | -| -- | Fang | benny | Dog | -| -- | bowser | diane | Dog | -| -- | Chirpy | | Bird | -| -- | | | | -| -- 4、 添加字段主人的生日owner_birth。 | | | | -| alter table pet add owner_birth int; | | | | -| -- | | | | -| -- 5、 将名称为Claws的猫的主人改为kevin | | | | -| update pet set `owner`='kevin' where name='Claws'; | | | | -| -- | | | | -| -- 6、 将没有死的狗的主人改为duck | | | | -| update pet set `owner`='duck' where death is null; | | | | -| -- | | | | -| -- 7、 查询没有主人的宠物的名字; | | | | -| select `owner` pet WHERE `owner` is null; | | | | -| -- | | | | -| -- 8、 查询已经死了的cat的姓名,主人,以及去世时间; | | | | -| select name,`owner`,death from pet WHERE species='Cat'; | | | | -| -- | | | | -| -- 9、 删除已经死亡的狗 | | | | -| delete from pet where species='Dog' and death='2009'; | | | | -| -- | | | | -| -- 10、查询所有宠物信息 | | | | -| select * from pet; | | | | -| -- | | | | -| -- ```sql | | | | -| -- | | | | -| -- ``` | | | | -| -- | | | | -| -- ## 第3题 | | | | -| -- | | | | - -## 第三题 - --- 1、创建数据库:test03_company -create database test03_company; - -use test03_company; - --- ```sql --- create database test03_company charset utf8; - --- ``` - --- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - --- A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - --- ```mysql --- use test03_company ; -create table department( -depid int primary key auto_increment, -depname char(10) not null unique key, -deinfo varchar(200) -); - --- ``` - --- B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - --- * 雇员编号为主键; --- * 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); - --- * 性别默认为男; - --- ```mysql -ALTER DATABASE test03_company CHARACTER SET utf8; -create table employee ( -empid int primary key auto_increment, -`name` varchar(10) not null, -sex enum('男','女') not null default'男', -title varchar(10), -birthday date, -depid int, -foreign key(depid) references department(depid) - -); - --- - --- C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - --- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) -create table salary( -empid int primary key, -basesalary double, -titlesalary double, -deduction double, -foreign key(empid) references employee(empid) - -); - --- 4、添加数据如下: - --- 部门表: -desc department; -show create table department; -alter table department convert to character set utf8; -insert into department values -(111,'生产部',null), -(222,'销售部',null), - -(333,'人事部','人力资源管理'); - -| -- | 部门编号 | 部门名称 | 部门简介 | -| ----------------------------------------------- | -------- | -------- | ------------ | -| -- | 111 | 生产部 | Null | -| -- | 222 | 销售部 | Null | -| -- | 333 | 人事部 | 人力资源管理 | -| -- | | | | -| -- 雇员表: | | | | -| insert into employee values | | | | -| (1001,'张三','男','高级工程师','1975-1-1',111), | | | | -| (1002,'李四','女','助师','1985-1-1',111), | | | | -| (1003,'王五','男','工程师','1978-11-11',222), | | | | -| (1004,'张六','男','工程师','1999-1-1',222); | | | | -| -- | | | | -| -- | 雇员编号 | 姓名 | 性别 | -| -- | -------- | ---- | ---- | -| -- | 1001 | 张三 | 男 | -| -- | 1002 | 李四 | 女 | -| -- | 1003 | 王五 | 男 | -| -- | 1004 | 张六 | 男 | -| -- | | | | -| -- 工资表: | | | | -| insert into salary values | | | | -| (1001,2200,1100,200), | | | | -| (1002,1200,200,null), | | | | -| (1003,2900,700,200), | | | | -| (1004,1950,700,150); | | | | -| -- | | | | -| -- | 雇员编号 | 基本工资 | 职务工资 | -| -- | -------- | -------- | -------- | -| -- | 1001 | 2200 | 1100 | -| -- | 1002 | 1200 | 200 | -| -- | 1003 | 2900 | 700 | -| -- | 1004 | 1950 | 700 | -| -- | | | | -| -- | | | | -| -- | | | | - -## 第四题 - - - --- 1、创建一个数据库:test04_school -create database test04_school; - -use test04_school; - --- 2、创建如下表格 -create table Department( -DepNo int(10) primary key not null unique, -DepName varchar(20) not null, -DepNote varchar(50) - -); - --- 表1 Department表的定义 - -| -- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| --------------------------------------------------------- | ---------- | ------------ | ------------------ | ---------- | --------- | ---------- | ------------ | -| -- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | -| -- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | -| -- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | -| -- | | | | | | | | -| -- 表2 Teacher表的定义 | | | | | | | | -| create table Teacher( | | | | | | | | -| Number int primary key not null unique, | | | | | | | | -| `Name` varchar(30) not null, | | | | | | | | -| Sex VARCHAR(4), | | | | | | | | -| Birth date, | | | | | | | | -| DepNo int, | | | | | | | | -| Salary float, | | | | | | | | -| Address VARCHAR(100), | | | | | | | | -| foreign key(DepNo) references Department(DepNo) | | | | | | | | -| ); | | | | | | | | -| -- | | | | | | | | -| -- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| -- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| -- | Number | 教工号 | int | 是 | 否 | 是 | 是 | -| -- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | -| -- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | -| -- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | -| -- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | -| -- | Salary | 工资 | float | 否 | 否 | 否 | 否 | -| -- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | -| -- | | | | | | | | -| -- 3、添加记录 | | | | | | | | -| alter table Department convert to character set utf8; | | | | | | | | -| insert into Department VALUES | | | | | | | | -| (601,'软件技术系','软件技术等专业'), | | | | | | | | -| (602,'网络技术系','多媒体技术等专业'), | | | | | | | | -| (603,'艺术设计系','广告艺术设计等专业'), | | | | | | | | -| (604,'管理工程系','连锁经营管理等专业'); | | | | | | | | -| -- | | | | | | | | -| -- | **DepNo** | **DepName** | **DepNote** | | | | | -| -- | --------- | ----------- | ------------------ | | | | | -| -- | 601 | 软件技术系 | 软件技术等专业 | | | | | -| -- | 602 | 网络技术系 | 多媒体技术等专业 | | | | | -| -- | 603 | 艺术设计系 | 广告艺术设计等专业 | | | | | -| -- | 604 | 管理工程系 | 连锁经营管理等专业 | | | | | -| alter table Teacher convert to character set utf8; | | | | | | | | -| insert into Teacher VALUES | | | | | | | | -| (2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'), | | | | | | | | -| (2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'), | | | | | | | | -| (2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'), | | | | | | | | -| (2004,'James','女','1980-10-20',602,3500,'四川省成都市'), | | | | | | | | -| (2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); | | | | | | | | -| -- | | | | | | | | -| -- | **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | -| -- | ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | -| -- | 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | -| -- | 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | -| -- | 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | -| -- | 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | -| -- | 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | -| -- | | | | | | | | -| -- 4、用SELECT语句查询Teacher表的所有记录。 | | | | | | | | -| select * from Teacher; | | | | | | | | -| -- | | | | | | | | -| -- ```mysql | | | | | | | | -| -- | | | | | | | | -| -- ``` | | | | | | | | -| -- | | | | | | | | -| -- | | | | | | | | -| -- | | | | | | | | -| -- | | | | | | | | -| -- | | | | | | | | -| -- | | | | | | | | \ No newline at end of file diff --git "a/52\347\250\213\345\270\205\347\277\224/\345\255\220\346\237\245\350\257\242\344\275\234\344\270\232.md" "b/52\347\250\213\345\270\205\347\277\224/\345\255\220\346\237\245\350\257\242\344\275\234\344\270\232.md" deleted file mode 100644 index c1fb7223cfa5dd8c67aa1cba2c9952e90b3cd512..0000000000000000000000000000000000000000 --- "a/52\347\250\213\345\270\205\347\277\224/\345\255\220\346\237\245\350\257\242\344\275\234\344\270\232.md" +++ /dev/null @@ -1,115 +0,0 @@ -| \| ### 笔记 \| \| \| | | | -| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| | [2](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_2) | \| -------- \| ------------------------------------------------------------ \| ------------------------------------------------------------ \| | -| | [3](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_3) | \| \| [2](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_2) \| \| | -| | [4](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_4) | \| \| [3](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_3) \| ##### 子查询 \| | -| | [5](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_5) | \| \| [4](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_4) \| \| | -| | [6](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_6) | \| \| [5](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_5) \| - 嵌套在其他SQL语句中的查询语句。 \| | -| | [7](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_7) | \| \| [6](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_6) \| - 子查询通常先运行,所以要用()包裹起来。 \| | -| | [8](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_8) | \| \| [7](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_7) \| - 子查询的运行结果,可以作为其他语句的条件,数据源等。 \| | -| | [9](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_9) | \| \| [8](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_8) \| \| | -| | [10](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_10) | \| \| [9](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_9) \| ##### 子查询分三种形式 \| | -| | [11](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_11) | \| \| [10](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_10) \| \| | -| | [12](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_12) | \| \| [11](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_11) \| select 1 from 2 where 3 \| | -| | [13](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_13) | \| \| [12](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_12) \| \| | -| | [14](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_14) | \| \| [13](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_13) \| 1.放在select后面 \| | -| | [15](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_15) | \| \| [14](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_14) \| \| | -| | [16](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_16) | \| \| [15](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_15) \| 2.放在where/having后面 \| | -| | [17](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_17) | \| \| [16](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_16) \| \| | -| | [18](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_18) | \| \| [17](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_17) \| 3.放在from后面,子查询当做一个临时的表使用,必须要给别名。 \| | -| | [19](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_19) | \| \| [18](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_18) \| \| | -| | [20](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_20) | \| \| [19](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_19) \| ##### where或having后的子查询,其子查询的结果有三种形式 \| | -| | [21](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_21) | \| \| [20](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_20) \| \| | -| | [22](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_22) | \| \| [21](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_21) \| 1.单列单个值,可以直接使用比较运算符 \| | -| | [23](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_23) | \| \| [22](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_22) \| \| | -| | [24](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_24) | \| \| [23](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_23) \| 2.单列多个值,可以使用 in ,not in 进行比较 \| | -| | [25](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_25) | \| \| [24](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_24) \| \| | -| | [26](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_26) | \| \| [25](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_25) \| 3.单列多个值,可以使用比较运算符,搭配any,all,等关键字与查询结果进行比较 \| | -| | [27](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_27) | \| \| [26](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_26) \| \| | -| | [28](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_28) | \| \| [27](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_27) \| ##### 子查询结果是单列,可以放在select参与运算,或者是作为字段,也可以放在where / having后当条件。 \| | -| | [29](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_29) | \| \| [28](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_28) \| \| | -| | [30](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_30) | \| \| [29](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_29) \| ##### 子查询结果是多列,多个值,只能放在from后面当临时表使用,并且必须取别名。 \| | -| | [31](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_31) | \| \| [30](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_30) \| \| | -| | [32](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_32) | \| \| [31](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_31) \| ### 作业 \| | -| | [33](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_33) | \| \| [32](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_32) \| \| | -| | [34](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_34) | \| \| [33](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_33) \| ~~~ mysql \| | -| | [35](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_35) | \| \| [34](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_34) \| create database text1; \| | -| | [36](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_36) | \| \| [35](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_35) \| use text1; \| | -| | [37](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_37) | \| \| [36](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_36) \| alter database text1 charset utf8; \| | -| | [38](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_38) | \| \| [37](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_37) \| alter table stuinfo charset utf8; \| | -| | [39](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_39) | \| \| [38](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_38) \| alter table stuExam charset utf8; \| | -| | [40](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_40) | \| \| [39](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_39) \| alter table stuMarks charset utf8; \| | -| | [41](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_41) | \| \| [40](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_40) \| \| | -| | [42](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_42) | \| \| [41](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_41) \| create table stuinfo( \| | -| | [43](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_43) | \| \| [42](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_42) \| stuNO varchar(10) primary key, \| | -| | [44](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_44) | \| \| [43](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_43) \| stuName varchar(10), \| | -| | [45](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_45) | \| \| [44](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_44) \| stuSex varchar(5), \| | -| | [46](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_46) | \| \| [45](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_45) \| stuAge double, \| | -| | [47](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_47) | \| \| [46](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_46) \| stuAddress varchar(20), \| | -| | [48](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_48) | \| \| [47](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_47) \| stuSeat int auto_increment unique \| | -| | [49](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_49) | \| \| [48](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_48) \| ); \| | -| | [50](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_50) | \| \| [49](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_49) \| create table stuExam( \| | -| | [51](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_51) | \| \| [50](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_50) \| examNo int primary key, \| | -| | [52](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_52) | \| \| [51](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_51) \| stuNO varchar(10), \| | -| | [53](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_53) | \| \| [52](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_52) \| writtenExam varchar(10), \| | -| | [54](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_54) | \| \| [53](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_53) \| labExam double, \| | -| | [55](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_55) | \| \| [54](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_54) \| foreign key(stuNo) references stuinfo(stuNo) \| | -| | [56](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_56) | \| \| [55](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_55) \| ); \| | -| | [57](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_57) | \| \| [56](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_56) \| create table stuMarks( \| | -| | [58](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_58) | \| \| [57](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_57) \| examNO int, \| | -| | [59](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_59) | \| \| [58](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_58) \| stuID varchar(10), \| | -| | [60](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_60) | \| \| [59](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_59) \| score double, \| | -| | [61](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_61) | \| \| [60](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_60) \| foreign key(examNO) references stuExam(examNO) \| | -| | [62](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_62) | \| \| [61](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_61) \| ); \| | -| | [63](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_63) | \| \| [62](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_62) \| insert into stuinfo values \| | -| | [64](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_64) | \| \| [63](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_63) \| ('s2501','张秋利','男',20,'美国硅谷',1), \| | -| | [65](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_65) | \| \| [64](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_64) \| ('s2502','李斯文','女',18,'湖北武汉',2), \| | -| | [66](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_66) | \| \| [65](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_65) \| ('s2503','马文才','男',18,'湖南长沙',3), \| | -| | [67](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_67) | \| \| [66](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_66) \| ('s2504','欧阳俊雄','女',21,'湖北武汉',4), \| | -| | [68](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_68) | \| \| [67](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_67) \| ('s2505','梅超风','男',16,'湖北武汉',5), \| | -| | [69](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_69) | \| \| [68](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_68) \| ('s2506','陈旋风','男',19,'美国硅谷',6); \| | -| | [70](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_70) | \| \| [69](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_69) \| insert into stuExam values \| | -| | [71](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_71) | \| \| [70](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_70) \| (1,'s2501','50',70), \| | -| | [72](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_72) | \| \| [71](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_71) \| (2,'s2502','60',65), \| | -| | [73](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_73) | \| \| [72](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_72) \| (3,'s2503','86',70), \| | -| | [74](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_74) | \| \| [73](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_73) \| (4,'s2504','40',80), \| | -| | [75](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_75) | \| \| [74](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_74) \| (5,'s2505','70',85), \| | -| | [76](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_76) | \| \| [75](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_75) \| (6,'s2506','85',90); \| | -| | [77](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_77) | \| \| [76](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_76) \| insert into stuMarks values \| | -| | [78](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_78) | \| \| [77](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_77) \| (1,'s2501',88), \| | -| | [79](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_79) | \| \| [78](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_78) \| (2,'s2501',92), \| | -| | [80](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_80) | \| \| [79](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_79) \| (3,'s2501',53), \| | -| | [81](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_81) | \| \| [80](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_80) \| (4,'s2502',60), \| | -| | [82](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_82) | \| \| [81](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_81) \| (5,'s2502',99), \| | -| | [83](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_83) | \| \| [82](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_82) \| (6,'s2503',82); \| | -| | [84](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_84) | \| \| [83](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_83) \| -- 1.查询出年龄比班上平均年龄大的学生的信息 \| | -| | [85](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_85) | \| \| [84](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_84) \| select * from stuinfo where stuAge>(select round(avg(stuAge),2) from stuinfo); \| | -| | [86](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_86) | \| \| [85](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_85) \| -- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) \| | -| | [87](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_87) | \| \| [86](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_86) \| select t.stuNO,t.stuName,t.stuAge,max(score) from stumarks s left join stuinfo t on s.stuID=t.stuNO group by s.stuID; \| | -| | [88](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_88) | \| \| [87](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_87) \| -- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) \| | -| | [89](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_89) | \| \| [88](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_88) \| select avg(writtenExam+labExam) from stuexam right join stuinfo on stuexam.stuNO=stuinfo.stuNO GROUP BY stuexam.stuNO; \| | -| | [90](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_90) | \| \| [89](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_89) \| -- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) \| | -| | [91](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_91) | \| \| [90](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_90) \| -- 普通查询 \| | -| | [92](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_92) | \| \| [91](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_91) \| select * from stuinfo where stusex='男' and stuage>=20; \| | -| | [93](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_93) | \| \| [92](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_92) \| -- 子查询 \| | -| | [94](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_94) | \| \| [93](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_93) \| select * from stuinfo where stuage=(select stuage from stuinfo where stusex='男' and stuage>=20); \| | -| | [95](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_95) | \| \| [94](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_94) \| -- 5.查询出年龄比所有男生年龄都大的女生的信息 \| | -| | [96](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_96) | \| \| [95](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_95) \| select stuSex,max(stuAge) from stuinfo where stuSex='女' and stuAge> all(select stuAge from stuinfo where stuSex ='男'); \| | -| | [97](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_97) | \| \| [96](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_96) \| -- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) \| | -| | [98](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_98) | \| \| [97](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_97) \| select t.stuNO,t.stuName,t.stuAge,max(score) from stumarks s left join stuinfo t on s.stuID=t.stuNO group by s.stuID; \| | -| | [99](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_99) | \| \| [98](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_98) \| -- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) \| | -| | [100](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_100) | \| \| [99](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_99) \| select * from stuinfo a left join stumarks c on a.stuNO=c.stuID where stuID is NULL; \| | -| | [101](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_101) | \| \| [100](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_100) \| -- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) \| | -| | [102](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_102) | \| \| [101](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_101) \| select * from stuinfo a left join stumarks c on a.stuNO=c.stuID where a.stuNO not in (select stuID from stumarks group by stuID); \| | -| | [103](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_103) | \| \| [102](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_102) \| -- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) \| | -| | [104](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_104) | \| \| [103](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_103) \| select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where score>90; \| | -| | [105](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_105) | \| \| [104](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_104) \| -- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) \| | -| | [106](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_106) | \| \| [105](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_105) \| select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where score>(select avg(score) from stumarks) \| | -| | [107](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_107) | \| \| [106](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_106) \| -- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) \| | -| | [108](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_108) | \| \| [107](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_107) \| select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where stumarks.score > any(select score from stumarks where stumarks.stuID='s2501' ) and stuinfo.stuName != '张秋利' \| | -| | [109](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_109) | \| \| [108](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_108) \| -- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) \| | -| | [110](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_110) | \| \| [109](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_109) \| select * from stuinfo left join stumarks on stuinfo.stuNO=stumarks.stuID where stumarks.score > any(select score from stumarks where stumarks.stuID='s2501' ) and stuinfo.stuName != '张秋利' \| | -| | [111](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_111) | \| \| [110](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_110) \| -- 13.查询班上比所有男生年龄都要大的女生的信息 \| | -| | [112](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_112) | \| \| [111](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_111) \| select stuSex,max(stuAge) from stuinfo where stuSex='女' and stuAge> all(select stuAge from stuinfo where stuSex ='男'); \| | -| | [113](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_113) | \| \| [112](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_112) \| -- 14.查询出只要比某个男生年龄大的女生的信息 \| | -| | [114](https://gitee.com/caijiale777/mysql-base/commit/63ab3395e5de805323488e9531e042c13582a1bb#0577cfdc9718621856d9cf258a20bdd6f55997f6_0_114) | \| \| [113](https://gitee.com/class-22-class-02/mysql-base/commit/c3abcf70c458af1f8b8b6e71e08d7de13768110c#96fe666e524fb6acd3b9389512c56be5eff26a71_0_113) \| select * from stuinfo where stusex = '女' and stuage > (select min(stuage) from stuinfo where stusex = '男'); | \ No newline at end of file diff --git "a/53 \345\221\250\345\216\232\350\276\260/20230220 \347\254\254\344\270\200\346\254\241\344\275\234\344\270\232.md" "b/53 \345\221\250\345\216\232\350\276\260/20230220 \347\254\254\344\270\200\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index 86905997a37604ea19c93c2a74875b05f367abb5..0000000000000000000000000000000000000000 --- "a/53 \345\221\250\345\216\232\350\276\260/20230220 \347\254\254\344\270\200\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,446 +0,0 @@ -# 笔记 - -## 创建数据库 - -```mysql -create database <数据库名>; -``` - -## 使用数据库 - -```mysql -use <数据库名>; -``` - -## 创建表格 - -```mysql -create table <表名>( - -); -``` - -## - -# 作业 - ---- - -## 第1题 - -1、创建数据库test01_market - -答案: - -```mysql -create database if not exists test01_market; -use test01_market; -``` - ---- - -2、创建表格customers - -| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date | - -答案: - -```mysql -create table if not exists customers( - c_num int(11), - c_name varchar(50), - c_contact varchar(50), - c_city varchar(50), - c_birth date -); -``` - ---- - -**要求3:**将c_contact字段移动到c_birth字段后面 - -答案: - -```mysql -alter table customers modify c_contact varchar(50) after c_birth; -``` - ---- - -**要求4:**将c_name字段数据类型改为 varchar(70) - -答案: - -```mys -alter table customers modify c_name varchar(70); -``` - ---- - -**要求5:**将c_contact字段改名为c_phone - -答案: - -```mysql -alter table customers change c_contact c_phone varchar(50); -``` - ---- - -**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -答案: - -```mysq -alter table customers add c_gender char(1) after c_name; -``` - ---- - -**要求7:**将表名改为customers_info - -答案: - -```mysq -alter table customers rename to customers_info; -``` - ---- - -**要求8:**删除字段c_city - -答案: - -```mysql -alter table customers_info drop c_city; -``` - -## 第2题 - -1、创建数据库test02_library - -答案: - -```mysql -create database if not exists test02_library; -use test02_library; -``` - ---- - -2、创建表格books - -| 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ------- | -------- | ------------- | -------- | ---- | -| b_id | 书编号 | int(11) | 否 | 是 | -| b_name | 书名 | varchar(50) | 否 | 否 | -| authors | 作者 | varchar(100) | 否 | 否 | -| price | 价格 | float | 否 | 否 | -| pubdate | 出版日期 | year | 否 | 否 | -| note | 说明 | varchar(100) | 是 | 否 | -| num | 库存 | int(11) | 否 | 否 | - -答案: - -```mysql -create table if not exists books( - b_id int(11), - b_name varchar(50), - authors varchar(100), - price float, - pubdate year, - note varchar(100), - num int(11) -); -``` - ---- - -3、向books表中插入记录 - -1) 指定所有字段名称插入第一条记录 - -答案: - -```mys -insert into books(b_id,b_name,`authors`,price,pubdate,note,num) values(1,'Tal of AAA','Dickes',23,1995,'novel',11); -``` - ---- - -2)不指定字段名称插入第二记录 - -答案: - -```mysql -insert into books values(2,'EmmaT','Janelura',35,1993,'joke',22); -``` - ---- - -3)同时插入多条记录(剩下的所有记录) - -| b_id | b_name | authors | price | pubdate | note | num | -| ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - -答案: - -```mysql -insert into books(b_id,b_name,authors,price,pubdate,note,num) values(3,'Story of Jane','Jane Tim',40,2001,'novel',0),(4,'Lovey Day','George Byron',20,2005,'novel',30),(5,'Old land','Honore Blade',30,'2010','law',0),(6,'The Battle','Upton Sara',30,'1999','medicine',40),(7,'Rose Hood','Richard haggard',28,'2008','cartoon',28); -``` - ---- - -4、将小说类型(novel)的书的价格都增加5。 - -答案: - -```mysql -update books set price = price+5 where note = 'novel'; -``` - ---- - -5、将名称为EmmaT的书的价格改为40。 - -答案: - -```mysql -update books set price = 40 where b_name = 'EmmaT'; -``` - ---- - -6、删除库存为0的记录 - -答案: - -```mysql -delete from books where num = 0; -``` - - - -## 第3题 - -1、创建数据库test03_bookstore - -答案: - -```mysql -create database if not exists test03_bookstore; -use test03_bookstore; -``` - ---- - -2、创建book表 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| sales | int(11) | NO | | NULL | | -| stock | int(11) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -答案: - -```mysql -create table if not exists book( - id int(11), - title varchar(100), - author varchar(100), - price double(11,2), - sales int(11), - stock int(11), - img_path varchar(100) -); -``` - ---- - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------------+------------+-------+-------+-------+----------------------------+ -| id | title | author | price | sales | stock | img_path | -+----+-------------+------------+-------+-------+-------+-----------------------------+ -| 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | -| 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | -+----+---------------+------------+-------+-------+-------+----------------------------+ -``` - -答案: - -```mysql -insert into book(id,title,author,price,sales,stock,img_path) values(1,'解忧杂货店','东野圭吾',27.20,102,98,'upload/books/解忧杂货店.jpg'),(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg'); - -``` - ---- - -3、创建用户表users,并插入数据 - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| username | varchar(100) | NO | UNI | NULL | | -| password | varchar(100) | NO | | NULL | | -| email | varchar(100) | YES | | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -答案: - -```mysql -create table if not exists users( - id int(11), - username varchar(100), - password varchar(100), - email varchar(100) -); -``` - ---- - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+----------+----------------------------------+--------------------+ -| id | username | password | email | -+----+----------+----------------------------------+--------------------+ -| 1 | admin | 112233 | admin@mxdx.com | -+----+----------+----------------------------------+--------------------+ -``` - -答案: - -```mysql -insert into users values(1,'admin',112233,'admin@mxdx.com'); - -``` - ---- - -4、创建订单表orders - -```mysql -+--------------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+--------------+--------------+------+-----+---------+-------+ -| id | varchar(100) | NO | PRI | NULL | | -| order_time | datetime | NO | | NULL | | -| total_count | int(11) | NO | | NULL | | -| total_amount | double(11,2) | NO | | NULL | | -| state | int(11) | NO | | NULL | | -| user_id | int(11) | NO | MUL | NULL | | -+--------------+--------------+------+-----+---------+-------+ -``` - -答案: - -```mysql -create table if not exists orders( - id varchar(100), - order_time datetime, - total_count int(11), - total_amount double(11,2), - stte int(11), - user_id int(11) -); -``` - ---- - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----------------+---------------------+-------------+--------------+-------+---------+ -| id | order_time | total_count | total_amount | state | user_id | -+----------------+---------------------+-------------+--------------+-------+---------+ -| 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | -+----------------+---------------------+-------------+--------------+-------+---------+ -``` - -答案: - -```mysql -insert into orders values(15294258455691,'2018-06-20 00:30:45',2,50.20,0,1); - -``` - ---- - -5、创建订单明细表order_items - -```mysql -+----------+--------------+------+-----+---------+----------------+ -| Field | Type | Null | Key | Default | Extra | -+----------+--------------+------+-----+---------+----------------+ -| id | int(11) | NO | PRI | NULL | auto_increment | -| count | int(11) | NO | | NULL | | -| amount | double(11,2) | NO | | NULL | | -| title | varchar(100) | NO | | NULL | | -| author | varchar(100) | NO | | NULL | | -| price | double(11,2) | NO | | NULL | | -| img_path | varchar(100) | NO | | NULL | | -| order_id | varchar(100) | NO | MUL | NULL | | -+----------+--------------+------+-----+---------+----------------+ -``` - -答案: - -```mysql -create table if not exists order_items( - id int(11), - count int(11), - amount double(11,2), - title varchar(100), - author varchar(100), - price double(11,2), - img_path varchar(100), - order_id varchar(100) -); -``` - ---- - -尝试添加部分模拟数据,参考示例如下: - -```mysql -+----+-------+--------+---------+---------+-------+----------------+----------------+ -| id |count| amount| title | author | price | img_path | order_id | -+----+-------+--------+------------+----------+-------+----------------+----------------+ -| 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | -| 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | -+----+-------+--------+------------+----------+-------+------------+----------------+ -``` - -答案: - -```mysql -insert into order_items(id,count,amount,title,author,price,img_path,order_id) values(1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg',15294258455691),(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg',15294258455691); -``` - diff --git "a/53 \345\221\250\345\216\232\350\276\260/20230223 \347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.md" "b/53 \345\221\250\345\216\232\350\276\260/20230223 \347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index edb87267085f96452d142b8a0b36bc555d188dfb..0000000000000000000000000000000000000000 --- "a/53 \345\221\250\345\216\232\350\276\260/20230223 \347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,170 +0,0 @@ -## 第1题:员工表 - -```mysql -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -``` - - - -| **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ------ | -------- | ------- | ------------ | -------- | ---------- | -| 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | - -**要求1:**查询出薪资在12000~13000之间的员工信息。 - -```msql -SELECT * from employee where salary>=12000 and salary<=13000; -``` - -**要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -```mysql -SELECT id,name,addr from employee where name like '刘%'; -``` - -**要求3:**将“李四”的家庭住址改为“广东韶关” - -```mysql -update employee set addr ='广东韶关' where name ='李四'; -``` - -**要求4:**查询出名字中带“小”的员工 - -```mysql -SELECT * from employee where name like '%小%'; -``` - -**要求5:**查询出薪资高于11000的男员工信息 - -```mysql -SELECT * from employee where salary>11000; -``` - -**要求6:**查询没有登记电话号码的员工 - -```mysql -SELECT * from employee where tel is null; -``` - -**要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -```mysql -SELECT * from employee where (salary >12000) or (addr = '广东深圳' or addr ='广东广州'); -``` - -**要求8:**查询每个员工的年薪,显示“姓名、年薪” - -```mysql -SELECT name '姓名',salary*12 '年薪' from employee; -``` - -## 第2题:国家信息表 - -countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -``` - -表数据样例: - -```mysql -+-------------+-----------+---------+------------+--------------+ -| name | continent | area | population | gdp | -+-------------+-----------+---------+------------+--------------+ -| Afghanistan | Asia | 652230 | 25500100 | 20343000000 | -| Albania | Europe | 28748 | 2831741 | 12960000000 | -| Algeria | Africa | 2381741 | 37100000 | 188681000000 | -| Andorra | Europe | 468 | 78115 | 3712000000 | -| Angola | Africa | 1246700 | 20609294 | 100990000000 | -+-------------+-----------+---------+------------+--------------+ -``` - -**要求1:** 查询大国 的国家名称、人口和面积。 - -如果一个国家满足下述两个条件之一,则认为该国是 大国 : - -- 面积至少为 300万平方公里(即,3000000 km2) -- 人口至少为 2500 万(即 25000000) - -```mysql -SELECT name,population,area from countries_info where area>=3000000 or population>=25000000; -``` - -**要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 - -```mysql -SELECT name,continent,area,population,gdp from countries_info where continent ='Asia'; -``` - -**要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 - -```mysql -SELECT * from countries_info where area<100000; -``` - -**要求4:**查询国家名字中包含“o“字母的国家信息 - -```mysql -SELECT * from countries_info where name like '%o%'; -``` - -**要求5:**查询GDP值超过10000000000的国家信息 - -```mysql -SELECT * from countries_info where gdp>10000000000; -``` - -**要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” - -```mysql -SELECT name '国家名', population '人口',gdp 'GDP值' from countries_info; -``` - -**要求7:**查询人均贡献GDP值低于1000的国家信息。 - -```mysql -SELECT * from countries_info where gdp<1000; -``` - -**要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” - -```mysql -SELECT name "国家名", area "面积",population "人口", gdp "人均国土面积值" from countries_info; -``` - diff --git "a/53 \345\221\250\345\216\232\350\276\260/20230223 \347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.md" "b/53 \345\221\250\345\216\232\350\276\260/20230223 \347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index 23e0dddb7a3ac6fcc9957f927ec40d2886b48d59..0000000000000000000000000000000000000000 --- "a/53 \345\221\250\345\216\232\350\276\260/20230223 \347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,306 +0,0 @@ -# 作业 - -## 第1题 - -1、创建数据库test01_company - -```mysql -create database test01_company; -use test01_company; -``` - -2、创建表格offices - -| 字段名 | 数据类型 | -| ---------- | ----------- | -| officeCode | int | -| city | varchar(30) | -| address | varchar(50) | -| country | varchar(50) | -| postalCode | varchar(25) | - -```mysql -create table offices( - officeCode int, - city varchar(30), - address varchar(50), - country varchar(50), - postalCode varchar(25) -); -``` - -3、创建表格employees - -| 字段名 | 数据类型 | -| --------- | ------------- | -| empNum | int(11) | -| lastName | varchar(50) | -| firstName | varchar(50) | -| mobile | varchar(25) | -| code | int | -| jobTitle | varchar(50) | -| birth | date | -| Note | varchar(255) | -| Sex | varchar(5) | - -```mysql -create table employees( - empNum int(11), - lastName varchar(50), - firstName varchar(50), - mobile varchar(25), - code int, - jobTitle varchar(50), - birth date, - Note varchar(255), - Sex varchar(5) -); -``` - -**要求4:**将表employees的mobile字段修改到code字段后面。 - -```mysql -alter table employees modify mobile varchar(25) after code; -``` - -**要求5:**将表employees的birth字段改名为birthday; - -```mysql -alter table employees change birth birthday date; -``` - -**要求6:**修改sex字段,数据类型为char(1)。 - -```mysql -alter table employees modify sex char(1); -``` - -**要求7:**删除字段note; - -```mysql -alter table employees drop note; -``` - -**要求8:**增加字段名favoriate_activity,数据类型为varchar(100); - -```mysql -alter table employees add favoriate_activity varchar(100); -``` - -**要求9:**将表employees的名称修改为 employees_info - -```mysql -alter table employees rename to employees_info; -``` - -## 第2题 - -1、创建数据库test02db - -```mysql -create database if not exists test02db; -use test02db; -``` - -2、创建表格pet - -| 字段名 | 字段说明 | 数据类型 | -| ------- | -------- | ----------- | -| name | 宠物名称 | varchar(20) | -| owner | 宠物主人 | varchar(20) | -| species | 种类 | varchar(20) | -| sex | 性别 | char(1) | -| birth | 出生日期 | year | -| death | 死亡日期 | year | - -```mysql -create table if not exists pet( - name varchar(20) comment '宠物名称', - owner varchar(20) comment '宠物主人', - species varchar(20) comment '种类', - sex char(1) comment '性别', - birth year comment '出生日期', - death year comment '死亡日期' -); -``` - -3、添加记录 - -| name | owner | species | sex | birth | death | -| ------ | ------ | ------- | ---- | ----- | ----- | -| Fluffy | harold | Cat | f | 2003 | 2010 | -| Claws | gwen | Cat | m | 2004 | | -| Buffy | | Dog | f | 2009 | | -| Fang | benny | Dog | m | 2000 | | -| bowser | diane | Dog | m | 2003 | 2009 | -| Chirpy | | Bird | f | 2008 | | - -```mysql -INSERT INTO pet VALUE ('Fluffy','harold','Cat','f',2003,2010),('Claws','gwen','Cat','m',2004,NULL),('Buffy',NULL,'Dog','f',2009,NULL),('Fang','benny','Dog','m',2000,NULL),('bowser','diane','Dog','m',2003,2009),('Chirpy',NULL,'Bird','f',2008,NULL); -``` - -4、 添加字段主人的生日owner_birth。 - -```mysql -alter table pet add owner_birth date comment '主人的生日'; -``` - -5、 将名称为Claws的猫的主人改为kevin - -```mysql -update pet set owner = 'kevin' where name = 'Claws'; -``` - -6、 将没有死的狗的主人改为duck - -```mysql -update pet set owner = 'duck' where species = 'Dog' and death is null; -``` - -7、 查询没有主人的宠物的名字; - -```mysql -select name from pet where owner is null; -``` - -8、 查询已经死了的cat的姓名,主人,以及去世时间; - -```mysql -select name, owner, death from pet where species = 'Cat' and death is not null; -``` - -9、 删除已经死亡的狗 - -```mysql -delete from pet where death is not null; -``` - -10、查询所有宠物信息 - -```mysql -select name,owner,species,sex,birth,death,owner_birth from pet; -``` - -## 第3题 - -1、创建数据库:test03_company - -```sql -create database test03_company charset utf8; -``` - -2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - -A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - -```mysql -use test03_company ; -create table department( - depid int primary key auto_increment, - depname char(10) not null unique key, - deinfo varchar(200) -) -``` - -B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - -* ​ 雇员编号为主键; -* ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); -* ​ 性别默认为男; - -```mysql -create table employee ( - empid int primary key auto_increment, - name varchar(10) not null, - sex enum('男','女') not null default '男', - title varchar(10), - birthday date, - depid int foreign key references department(depid) -) -``` - -C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - -3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) - -4、添加数据如下: - -部门表: - -| 部门编号 | 部门名称 | 部门简介 | -| -------- | -------- | ------------ | -| 111 | 生产部 | Null | -| 222 | 销售部 | Null | -| 333 | 人事部 | 人力资源管理 | - - 雇员表: - -| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | -| -------- | ---- | ---- | ---------- | ---------- | ------------ | -| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | -| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | -| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | -| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | - - 工资表: - -| 雇员编号 | 基本工资 | 职务工资 | 扣除 | -| -------- | -------- | -------- | ---- | -| 1001 | 2200 | 1100 | 200 | -| 1002 | 1200 | 200 | NULL | -| 1003 | 2900 | 700 | 200 | -| 1004 | 1950 | 700 | 150 | - - - -## 第4题 - -1、创建一个数据库:test04_school - -2、创建如下表格 - -表1 Department表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | -| DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | -| DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | - -表2 Teacher表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| Number | 教工号 | int | 是 | 否 | 是 | 是 | -| Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | -| Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | -| Birth | 出生日期 | date | 否 | 否 | 否 | 否 | -| DepNo | 部门号 | int | 否 | 是 | 否 | 否 | -| Salary | 工资 | float | 否 | 否 | 否 | 否 | -| Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | - -3、添加记录 - -| **DepNo** | **DepName** | **DepNote** | -| --------- | ----------- | ------------------ | -| 601 | 软件技术系 | 软件技术等专业 | -| 602 | 网络技术系 | 多媒体技术等专业 | -| 603 | 艺术设计系 | 广告艺术设计等专业 | -| 604 | 管理工程系 | 连锁经营管理等专业 | - -| **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | -| ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | -| 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | -| 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | -| 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | -| 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | -| 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | - -4、用SELECT语句查询Teacher表的所有记录。 - -```mysql - -``` - - - diff --git "a/53 \345\221\250\345\216\232\350\276\260/20230302 \347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.md" "b/53 \345\221\250\345\216\232\350\276\260/20230302 \347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index 8b3c9129195a3991065abfde53b9620acafc714e..0000000000000000000000000000000000000000 --- "a/53 \345\221\250\345\216\232\350\276\260/20230302 \347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,106 +0,0 @@ -1. create database if not exists d1 charset utf8; - - use d1; - - CREATE TABLE if not exists `student` ( - `Sno` varchar(20) NOT NULL COMMENT '学号', - `Sname` varchar(20) NOT NULL COMMENT '学生姓名', - `Ssex` varchar(20) NOT NULL COMMENT '学生性别', - `Sbirthday` datetime DEFAULT NULL COMMENT '学生出生年月', - `Class` varchar(20) DEFAULT NULL COMMENT '学生所在班级', - PRIMARY KEY (`Sno`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8; - - CREATE TABLE if not exists `Teacher` ( - `Tno` varchar(20) NOT NULL COMMENT '教工编号', - `Tname` varchar(20) NOT NULL COMMENT '教工姓名', - `Tsex` varchar(20) NOT NULL COMMENT '教工性别', - `Tbirthday` datetime DEFAULT NULL COMMENT '教工出生年月', - `Prof` varchar(20) DEFAULT NULL COMMENT '职称', - `Depart` varchar(20) NOT NULL COMMENT '教工所在部门', - PRIMARY KEY (`Tno`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8; - - CREATE TABLE if not exists `Course` ( - `Cno` varchar(20) NOT NULL COMMENT '课程号', - `Cname` varchar(20) NOT NULL COMMENT '课程名称', - `Tno` varchar(20) NOT NULL COMMENT '教工编号', - PRIMARY KEY (`Cno`), - KEY `Tno` (`Tno`), - CONSTRAINT `course_ibfk_1` FOREIGN KEY (`Tno`) REFERENCES `teacher` (`Tno`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8; - - CREATE TABLE if not exists `Score` ( - `Sno` varchar(20) NOT NULL COMMENT '学号', - `Cno` varchar(20) NOT NULL COMMENT '课程号', - `Degree` decimal(4,1) DEFAULT NULL COMMENT '成绩', - PRIMARY KEY (`Sno`,`Cno`), - KEY `Cno` (`Cno`), - CONSTRAINT `score_ibfk_1` FOREIGN KEY (`Cno`) REFERENCES `course` (`Cno`), - CONSTRAINT `score_ibfk_2` FOREIGN KEY (`Sno`) REFERENCES `student` (`Sno`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8; - - INSERT INTO student - VALUES - (108,'曾华','男','1977-9-1',95033), - (105,'匡明','男','1975-10-2',95031), - (107,'王丽','女','1976-1-23',95033), - (101,'李军','男','1976-2-20',95033), - (109,'王芳','女','1975-2-10',95031), - (103,'陆君','男','1974-6-3',95031); - - INSERT INTO Course - VALUES - (3-105,'计算机导论',825), - (3-245,'操作系统',804), - (6-166,'数字电路',856), - (9-888,'高等数学',831); - - INSERT INTO Score - VALUES - ('103','3-245','86'), - ('105','3-245','75'), - ('109','3-245','68'), - ('103','3-105','92'), - ('105','3-105','88'), - ('109','3-105','76'), - ('101','3-105','64'), - ('107','3-105','91'), - ('108','3-105','78'), - ('101','6-166','85'), - ('107','6-166','79'), - ('108','6-166','81'); - - INSERT INTO Teacher - VALUES - (804,'李诚','男','1958-12-2','副教授','计算机系'), - (856,'张旭','男','1969-3-12','讲师','电子工程系'), - (825,'王萍','女','1972-5-5','助教','计算机系'), - (831,'刘冰','女','1977-8-14','助教','电子工程系'); - - -- 4. 查询 - -- ① 查询Score表中的最高分的学生学号和课程号。 - -- ② 查询所有学生的Sname、Cno和Degree列。 - -- ③ 查询所有学生的Sno、Cname和Degree列。 - -- ④ 查询所有学生的Sname、Cname和Degree列。 - -- ⑤ 查询“95033”班学生的平均分。 - -- ⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 - -- ⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 - -- ⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 - -- ⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 - -- ⑩ 查询“张旭“教师任课的学生成绩。 - -- 11 查询选修某课程的同学人数多于5人的教师姓名。 - -- 12 查询出“计算机系“教师所教课程的成绩表。 - -- 13 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 - -- 14 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 - -- 15 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. - -- 16 查询成绩比该课程平均成绩低的同学的成绩表。 - -- 17 查询所有任课教师的Tname和Depart. - -- 18 查询所有未讲课的教师的Tname和Depart. - -- 19 查询“男”教师及其所上的课程。 - -- 20 查询最高分同学的Sno、Cno和Degree列。 - -- 21 查询和“李军”同性别的所有同学的Sname. - -- 22 查询和“李军”同性别并同班的同学Sname. - - ###### -- 23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 - -- \ No newline at end of file diff --git "a/53 \345\221\250\345\216\232\350\276\260/20230308 \347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.md" "b/53 \345\221\250\345\216\232\350\276\260/20230308 \347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index b64e7ba6b0328835d086aef5b46be6816da68808..0000000000000000000000000000000000000000 --- "a/53 \345\221\250\345\216\232\350\276\260/20230308 \347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,38 +0,0 @@ -# 2023年3月8日 第五次作业 - -```mysql --- 在如图的数据表上完成以下题目 --- --- 1.查询出年龄比班上平均年龄大的学生的信息 -SELECT * from stuinfo where stuage>(SELECT avg(stuage) from stuinfo); --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -SELECT DISTINCT i.stuNO,i.stuName,i.stuSex,max(score) 选修课程的最高分 from stuinfo i right JOIN stumarks m on i.stuNO=stuID GROUP BY stuNO; --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -SELECT i.stuNO,stuName,stuSex,((writtenExam + labExam)/2) '考试平均分' FROM stuinfo i LEFT JOIN stuexam e on i.stuNO = e.stuNO; --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -SELECT * from stuinfo where stuSex='男' && stuAge>=20; -SELECT * from stuinfo where stuSex='男' and stuage in (SELECT stuAge from stuinfo where stuAge>=20); --- 5.查询出年龄比所有男生年龄都大的女生的信息 -SELECT * from stuinfo where stuAge>(SELECT stuAge from stuinfo where stuSex='男' LIMIT 1); --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -SELECT distinct i.* from stumarks m LEFT join stuinfo i on i.stuNO= m.stuID where i.stuNO not in (SELECT stuID from stumarks where score<60); --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -SELECT i.* from stuinfo i LEFT JOIN stuexam e on i.stuNO = e.stuNO; -SELECT * from stuinfo where stuNO in (SELECT stuNO from stuexam); --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -SELECT distinct i.* from stuinfo i LEFT JOIN stumarks m on i.stuNO = m.stuID where m.stuID is null; -SELECT * from stuinfo where stuNO not in(SELECT distinct stuID from stumarks); --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -SELECT i.* from stuinfo i LEFT JOIN stumarks m on i.stuNO=m.stuID where score>90; --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -SELECT i.*,avg(score) as 平均分 from stumarks m LEFT JOIN stuinfo i on i.stuNO=m.stuID GROUP BY stuID HAVING 平均分>80 ; --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) -SELECT i.* from stuinfo i LEFT JOIN stumarks m on i.stuNO = m.stuID where score>(SELECT max(score) from stumarks m RIGHT JOIN stuinfo i on i.stuNO=m.stuid where i.stuName='张秋利'); --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) -SELECT i.* from stuinfo i LEFT JOIN stumarks m on i.stuNO = m.stuID where score >(SELECT score from stumarks m RIGHT JOIN stuinfo i on i.stuNO=m.stuid where i.stuName='张秋利' ORDER BY score asc LIMIT 1) && i.stuName!='张秋利' GROUP BY m.stuID; --- 13.查询班上比所有男生年龄都要大的女生的信息 -SELECT * from stuinfo where stuAge>(SELECT stuAge from stuinfo where stuSex='男' LIMIT 1); --- 14.查询出只要比某个男生年龄大的女生的信息 -SELECT * from stuinfo where stuSex='女' && stuAge>(SELECT min(stuAge) FROM stuinfo where stuSex='男'); -``` - diff --git "a/54 \345\217\266\345\255\220\350\261\252/mysql\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232.md" "b/54 \345\217\266\345\255\220\350\261\252/mysql\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index 29c1f213b47e8dcf4953e4d2298f9405f7207f22..0000000000000000000000000000000000000000 --- "a/54 \345\217\266\345\255\220\350\261\252/mysql\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,323 +0,0 @@ - - -## 第1题 - -1、创建数据库test01_market - -~~~ MYSQL -CREATE DATABASE text01_market; -~~~ - -2、创建表格customers - -~~~ mysql - CREATE TABLE customers( -c_num INT(11), -c_name VARCHAR(50), -c_contact varchar(50), -c_city varchar(50), -c_birth DATE -); -~~~ - - - -| 字段名 | 数据类型 | -| --------- | ----------- | -| c_num | int(11) | -| c_name | varchar(50) | -| c_contact | varchar(50) | -| c_city | varchar(50) | -| c_birth | date | - -**要求3:**将c_contact字段移动到c_birth字段后面 - -~~~ mysql -ALTER TABLE customers MODIFY c_contact VARCHAR(50) AFTER c_birth; -~~~ - -**要求4:**将c_name字段数据类型改为 varchar(70) - -~~~ mysql - ALTER TABLE customers MODIFY c_name VARCHAR(70); -~~~ - -**要求5:**将c_contact字段改名为c_phone - -~~~ mysql -ALTER TABLE customers CHANGE c_contact c_phone VARCHAR(50); -~~~ - -**要求6:**增加c_gender字段到c_name后面,数据类型为char(1) - -~~~ mysql -ALTER TABLE customers ADD c_gender CHAR(1) AFTER c_name; -~~~ - -**要求7:**将表名改为customers_info - -~~~ mysql -ALTER TABLE customers RENAME customers_info; -~~~ - -**要求8:**删除字段c_city - -```mysql -ALTER TABLE customers_info DROP c_city;x  -``` - -## 第2题 - -1、创建数据库test02_library - -```mysql -CREATE DATABASE text02_library; -``` - --- 2、创建表格books - -```mysql -use test02_library; - -CREATE TABLE books( -b_id int(11), -b_name VARCHAR(50), -`authors` VARCHAR(100), -price FLOAT, -pubdate year, -note VARCHAR(100), -num INT(11) -); -``` - -| -- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | -| ---- | ------- | -------- | ------------- | -------- | ---- | -| -- | b_id | 书编号 | int(11) | 否 | 是 | -| -- | b_name | 书名 | varchar(50) | 否 | 否 | -| -- | authors | 作者 | varchar(100) | 否 | 否 | -| -- | price | 价格 | float | 否 | 否 | -| -- | pubdate | 出版日期 | year | 否 | 否 | -| -- | note | 说明 | varchar(100) | 是 | 否 | -| -- | num | 库存 | int(11) | 否 | 否 | - -3、向books表中插入记录 - --- 1) 指定所有字段名称插入第一条记录 - -```mysql -insert into books(b_id,b_name,author,price,pubdate,note,num) -VALUES(1,'Tal of AAA','Dickes',23,1995,'novel',11); -``` - --- 2)不指定字段名称插入第二记录 - -```mysql -INSERT into books values(2,'EmmaT','Jane lura',35,1993,'joke',22); -``` - --- 3)同时插入多条记录(剩下的所有记录) - -```mysql -insert into books(b_id,b_name,author,price,pubdate,note,num) VALUES -(3,'Story of Jane','Jane Tim',40,2001,'novel',0), -(4,'Lovey Day','George Byron',20,2005,'novel',30), -(5,'Old land','Honore Blade',30,2010,'law',0), -(6,'The Battle','Upton Sara',30,1999,'medicine',40), -(7,'Rose Hood','Richard haggard',28,2008,'cartoon',28); -``` - -| -- | b_id | b_name | authors | price | pubdate | note | num | -| ---- | ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | -| -- | 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | -| -- | 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | -| -- | 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | -| -- | 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | -| -- | 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | -| -- | 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | -| -- | 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | - --- 4、将小说类型(novel)的书的价格都增加5。 - -```mysql -update books set price = price+5 WHERE note = 'novel'; -``` - --- 5、将名称为EmmaT的书的价格改为40。 - -```my - UPDATE books set price=40 where b_name='EmmaT'; -``` - --- 6、删除库存为0的记录 - -```mysql - delete from books where num=0; -``` - - - -# 第三题 - --- 1、创建数据库test03_bookstore - -```mysql -CREATE DATABASE test03_bookstore; -``` - --- 2、创建book表 - -```mysql -use test03_bookstore; - drop table book; -create table book( -id int(11) PRIMARY KEY auto_increment, -title VARCHAR(100), -author varchar(100), -price DOUBLE(11,2), -sales int(11), -stock int(11), -img_path VARCHAR(100) -``` - --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | sales | int(11) | NO | | NULL | | --- | stock | int(11) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ - --- 尝试添加部分模拟数据,参考示例如下: - -```mysql -insert into book values(1,'解忧杂货店','东野圭吾',27.20,102,98,'upload/books/解忧杂货店.jpg'); -insert into book values(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg'); -``` - --- +----+-------------+------------+-------+-------+-------+----------------------------+ --- | id | title | author | price | sales | stock | img_path | --- +----+-------------+------------+-------+-------+-------+-----------------------------+ --- | 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | --- | 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | --- +----+---------------+------------+-------+-------+-------+----------------------------+ --- ``` - --- 3、创建用户表users,并插入数据 - -```mysql -create table users( -id int(11) PRIMARY KEY auto_increment, -username VARCHAR(100) unique, -passwor VARCHAR(100), -email VARCHAR(100) null -``` - --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | username | varchar(100) | NO | UNI | NULL | | --- | password | varchar(100) | NO | | NULL | | --- | email | varchar(100) | YES | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ - --- 尝试添加部分模拟数据,参考示例如下: - -```mysql -insert into users values(1,'admin',112233,'admin@mxdx.com'); -``` - --- +----+----------+----------------------------------+--------------------+ --- | id | username | password | email | --- +----+----------+----------------------------------+--------------------+ --- | 1 | admin | 112233 | admin@mxdx.com | --- +----+----------+----------------------------------+--------------------+ - - - --- 4、创建订单表orders - -```MYSQL -create table orders( -id VARCHAR(100) PRIMARY key, -order_time datetime, -total_count int(11), -total_amount DOUBLE(11,2), -state int(11), -user_id int(11) -``` - --- ```mysql --- +--------------+--------------+------+-----+---------+-------+ --- | Field | Type | Null | Key | Default | Extra | --- +--------------+--------------+------+-----+---------+-------+ --- | id | varchar(100) | NO | PRI | NULL | | --- | order_time | datetime | NO | | NULL | | --- | total_count | int(11) | NO | | NULL | | --- | total_amount | double(11,2) | NO | | NULL | | --- | state | int(11) | NO | | NULL | | --- | user_id | int(11) | NO | MUL | NULL | | --- +--------------+--------------+------+-----+---------+-------+ - --- 尝试添加部分模拟数据,参考示例如下: - -```MYSQL -insert into orders values(15294258455691,'2018-06-20 00:30:45',2,50.20,0,1); -``` - --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | id | order_time | total_count | total_amount | state | user_id | --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | --- +----------------+---------------------+-------------+--------------+-------+---------+ - --- 5、创建订单明细表order_items - -```MYSQL -create table order_items( -id int(11) PRIMARY KEY auto_increment, -count int(11), -amount DOUBLE(11,2), -title VARCHAR(100), -author varchar(100), -price double(11,2), -img_path VARCHAR(100), -order_id VARCHAR(100) -); -``` - --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | count | int(11) | NO | | NULL | | --- | amount | double(11,2) | NO | | NULL | | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- | order_id | varchar(100) | NO | MUL | NULL | | --- +----------+--------------+------+-----+---------+----------------+ - - - --- 尝试添加部分模拟数据,参考示例如下: - -```MYSQL -insert into order_items values -(1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg','15294258455691'); -insert into order_items values -(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg','15294258455691'); --- ```mysql -``` - --- +----+-------+--------+---------+---------+-------+----------------+----------------+ --- | id |count| amount| title | author | price | img_path | order_id | --- +----+-------+--------+------------+----------+-------+----------------+----------------+ --- | 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | --- | 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | --- +----+-------+--------+------------+----------+-------+------------+----------------+ diff --git "a/54 \345\217\266\345\255\220\350\261\252/mysql\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.md" "b/54 \345\217\266\345\255\220\350\261\252/mysql\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index 8f310a4782ce452126dd752f1c57ae15b01a3499..0000000000000000000000000000000000000000 --- "a/54 \345\217\266\345\255\220\350\261\252/mysql\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,221 +0,0 @@ --- ## 第1题:员工表 - -```mysql - CREATE DATABASE abc CHARSET utf8; -USE abc; -``` - --- ```mysql -` - -```mysql -drop table if exists `employee`; -``` - -​ ` --- #创建employee表 -` - -```mysql - CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT - ); -``` - -` --- #添加信息 - -```mysql - INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), - (10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), - (10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); -SELECT*FROM employee; -``` - - -| -- | **id** | **name** | **sex** | **tel** | **addr** | **salary** | -| ---- | ------ | -------- | ------- | ------------ | -------- | ---------- | -| -- | 10001 | 张一一 | 男 | 13456789000 | 广东韶关 | 10010.58 | -| -- | 10002 | 刘小红 | 女 | 13454319000 | 广东江门 | 12010.21 | -| -- | 10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 10040.11 | -| -- | 10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 15010.23 | -| -- | 10005 | 王艳 | 女 | NULL | 广东广州 | 14050.16 | -| -- | | | | | | | -| | | | | | | | -| | | | | | | | - --- **要求1:**查询出薪资在12000~13000之间的员工信息。 - -```mysql -SELECT*FROM employee WHERE salary BETWEEN 12000 and 13000; -``` - --- **要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 - -```mysql -SELECT id,`name`, addr FROM employee WHERE `NAME` LIKE '刘__' ; -``` - --- **要求3:**将“李四”的家庭住址改为“广东韶关” - -```mysql -SELECT addr="广东韶关" FROM employee WHERE name="李四"; -``` - --- **要求4:**查询出名字中带“小”的员工 - -```mysql -SELECT*FROM employee WHERE `NAME` LIKE '%小%'; -``` - --- **要求5:**查询出薪资高于11000的男员工信息 - -```mysql -SELECT*FROM employee WHERE salary > 11000 AND sex = '男'; -``` - --- **要求6:**查询没有登记电话号码的员工 - -```mysql -SELECT*FROM employee WHERE tel IS null; -``` - --- **要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 - -```mysql -SELECT*FROM employee WHERE salary > 12000 OR addr = '广东深圳' AND addr = '广州'; -``` - --- **要求8:**查询每个员工的年薪,显示“姓名、年薪” - -```mysql -SELECT name 姓名,salary*12 年薪 FROM employee; -``` - - - --- ```mysql --- --- ``` --- --- ## 第2题:国家信息表 --- --- countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 - -```mysql -CREATE DATABASE abcd CHARSET utf8; -USE abcd; -``` - --- ```mysql - -```mysql - DROP TABLE IF EXISTS `countries_info`; - CREATE TABLE `countries_info`( -`name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT - ); -``` - - - -```mysql - INSERT INTO countries_info VALUES - ('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); -SELECT*FROM countries_info; -``` - - --- ``` --- --- 表数据样例: --- --- ```mysql --- +-------------+-----------+---------+------------+--------------+ --- | name | continent | area | population | gdp | --- +-------------+-----------+---------+------------+--------------+ --- | Afghanistan | Asia | 652230 | 25500100 | 20343000000 | --- | Albania | Europe | 28748 | 2831741 | 12960000000 | --- | Algeria | Africa | 2381741 | 37100000 | 188681000000 | --- | Andorra | Europe | 468 | 78115 | 3712000000 | --- | Angola | Africa | 1246700 | 20609294 | 100990000000 | --- +-------------+-----------+---------+------------+--------------+ --- ``` --- --- **要求1:** 查询大国 的国家名称、人口和面积。 -```mysql -SELECT `NAME`,continent,population FROM countries_info; -``` - --- 如果一个国家满足下述两个条件之一,则认为该国是 大国 : -```mysql -SELECT*FROM countries_info WHERE area > 3000000 OR population > 25000000; -``` - - - --- - 面积至少为 300万平方公里(即,3000000 km2) --- --- - 人口至少为 2500 万(即 25000000) --- --- **要求2:**查询属于亚洲的国家名称、所属大陆面积、人口和GDP 值 --- -```mysql -SELECT name,area,population,gdp FROM countries_info WHERE continent = 'Asia'; -``` - - --- **要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 --- -```mysql -SELECT*FROM countries_info WHERE area < 10000 AND population < 100000; -``` - --- **要求4:**查询国家名字中包含“o“字母的国家信息 - -```mysql -SELECT*FROM countries_info WHERE name LIKE '%o%'; -``` - --- **要求5:**查询GDP值超过10000000000的国家信息 - -```mysql -SELECT*FROM countries_info WHERE gdp > 10000000000; -``` - --- **要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” -```mysql -SELECT gdp/area 人均gdp,name,population,gdp FROM countries_info; -``` - - - --- **要求7:**查询人均贡献GDP值低于1000的国家信息。 --- - -```mysql -SELECT*FROM countries_info WHERE gdp/population < 1000; -``` - --- **要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” -```mysql -SELECT area/population 人均国土面积,name,area,population FROM countries_info; -``` - - - diff --git "a/54 \345\217\266\345\255\220\350\261\252/mysql\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.md" "b/54 \345\217\266\345\255\220\350\261\252/mysql\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index 4da8b7a4da450c3554375808710e0647e649f4c4..0000000000000000000000000000000000000000 --- "a/54 \345\217\266\345\255\220\350\261\252/mysql\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,385 +0,0 @@ -## 第1题 - -1、创建数据库test01_company - - - -```mysql -CREATE DATABASE text01_company; -``` - -2、创建表格offices - -```mysql -use test01_company -CREATE TABLE offices( -officeCode int, -city VARCHAR(30), -address varchar(50), -country varchar(50), -postalCode varchar(25) -); -``` - - - -| 字段名 | 数据类型 | -| ---------- | ----------- | -| officeCode | int | -| city | varchar(30) | -| address | varchar(50) | -| country | varchar(50) | -| postalCode | varchar(25) | - -3、创建表格employees - -```mysql -use test01_company -CREATE table employees( -empNum int(11), -lastName varchar(50), -firstName varchar(50), -mobile VARCHAR(25), -`code` int, -jobTitle VARCHAR(50), -birth date, -Note varchar(255), -Sex VARCHAR(5) -); -``` - - - -| 字段名 | 数据类型 | -| --------- | ------------- | -| empNum | int(11) | -| lastName | varchar(50) | -| firstName | varchar(50) | -| mobile | varchar(25) | -| code | int | -| jobTitle | varchar(50) | -| birth | date | -| Note | varchar(255) | -| Sex | varchar(5) | - -**要求4:**将表employees的mobile字段修改到code字段后面。 - -```mysql -ALTER TABLE employees MODIFY mobile VARCHAR(25) AFTER `code` ; -``` - -**要求5:**将表employees的birth字段改名为birthday; - -```mysql -ALTER TABLE employees CHANGE mobile birthday date; -``` - -**要求6:**修改sex字段,数据类型为char(1)。 - -```mysql -ALTER TABLE employees MODIFY sex char(1); -``` - -**要求7:**删除字段note; - -```mysql -ALTER TABLE employees DROP note; -``` - -**要求8:**增加字段名favoriate_activity,数据类型为varchar(100); - -```mysql -ALTER TABLE employees add favoriate_activity VARCHAR(100); -``` - -**要求9:**将表employees的名称修改为 employees_info - -```mysql -ALTER TABLE employees RENAME employees_info; -``` - - - -## 第2题 - -1、创建数据库test02db - -```mysql -CREATE database text02db; -``` - -2、创建表格pet - -```mysql -use text02db; -CREATE TABLE pet( -`name` varchar(20), -`owner` varchar(20), -species varchar(20), -sex char(1), -birth year, -death year -); -``` - - - -| 字段名 | 字段说明 | 数据类型 | -| ------- | -------- | ----------- | -| name | 宠物名称 | varchar(20) | -| owner | 宠物主人 | varchar(20) | -| species | 种类 | varchar(20) | -| sex | 性别 | char(1) | -| birth | 出生日期 | year | -| death | 死亡日期 | year | - -3、添加记录 - -```mysql -INSERT into pet VALUES('Fluffy','harold','Cat','f',2003,2010),('Claws','gwen','Cat','m',2004,NULL),('Buffy',NULL,'Dog','f',2009,NULL),('Fang','benny','Dog','m',2000,NULL),('bowser','diane','Dog','m',2003,2009),('Chirpy',NULL,'Bird','f',2008,NULL); -``` - - - -| name | owner | species | sex | birth | death | -| ------ | ------ | ------- | ---- | ----- | ----- | -| Fluffy | harold | Cat | f | 2003 | 2010 | -| Claws | gwen | Cat | m | 2004 | | -| Buffy | | Dog | f | 2009 | | -| Fang | benny | Dog | m | 2000 | | -| bowser | diane | Dog | m | 2003 | 2009 | -| Chirpy | | Bird | f | 2008 | | - -4、 添加字段主人的生日owner_birth。 - -```mysql -ALTER TABLE pet add owner_birth date; -``` - -5、 将名称为Claws的猫的主人改为kevin - -```mysql -UPDATE pet SET `owner`='kevin' WHERE `name`='Claws'; -``` - -6、 将没有死的狗的主人改为duck - -```mysql -update pet set `owner`='duck' WHERE `death`IS NULL; -``` - -7、 查询没有主人的宠物的名字; - -```mysql -SELECT `name` FROM pet where `owner` IS null; -``` - -8、 查询已经死了的cat的姓名,主人,以及去世时间; - -```mysql -select `name`,`owner`,death from pet WHERE species='Cat'; -``` - -9、 删除已经死亡的狗 - -```mysql -delete from pet where species='Dog' and death='2009'; -``` - -10、查询所有宠物信息 - -```mysql -select * from pet; -``` - -## 第3题 - -1、创建数据库:test03_company - -```sql -create database test03_company charset utf8; -``` - -2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 - -A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 - -```mysql -use test03_company ; -create table department( - depid int primary key auto_increment, - depname char(10) not null unique key, - deinfo varchar(200) -) -``` - -B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 - -* ​ 雇员编号为主键; -* ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); -* ​ 性别默认为男; - -```mysql -create table employee ( - empid int primary key auto_increment, - name varchar(10) not null, - sex enum('男','女') not null default '男', - title varchar(10), - birthday date, - depid int foreign key references department(depid) -) -``` - -C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 - -3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) - -```mysql -create table salary( -empid int primary key, -basesalary double, -titlesalary double, -deduction double, -foreign key(empid) references employee(empid) - -); -``` - -4、添加数据如下: - -```mysql -INSERT INTO department(depid,depname,deinfo) VALUES (111,'生产部',NULL),(222,'销售部',NULL),(333,'人事部','人力资源管理'); -``` - -部门表: - -| 部门编号 | 部门名称 | 部门简介 | -| -------- | -------- | ------------ | -| 111 | 生产部 | Null | -| 222 | 销售部 | Null | -| 333 | 人事部 | 人力资源管理 | - - 雇员表: - -```mysql -INSERT into employee(empid,`name`,sex,title,birthday,depid) VALUES(1001,'张三','男','高级工程师','1975-1-1',111),(1002,'李四','女','助工','1985-1-1',111),(1003,'王五','男','工程师','1978-11-11',222),(1004,'张六','男','工程师','1999-1-1',222); -``` - - - -| 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | -| -------- | ---- | ---- | ---------- | ---------- | ------------ | -| 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | -| 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | -| 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | -| 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | - - 工资表: - -```mysql -INSERT INTO salary(empid,basesalary,titlesalary,deduction) VALUES(1001,2200,1100,200),(1002,1200,200,NULL),(1003,2990,700,200),(1004,1950,700,150); -``` - - - -| 雇员编号 | 基本工资 | 职务工资 | 扣除 | -| -------- | -------- | -------- | ---- | -| 1001 | 2200 | 1100 | 200 | -| 1002 | 1200 | 200 | NULL | -| 1003 | 2900 | 700 | 200 | -| 1004 | 1950 | 700 | 150 | - - - -## 第4题 - -1、创建一个数据库:test04_school - -```mysql -CREATE DATABASE text04_scgool; -``` - -2、创建如下表格 - -```mysql -use text04_scgool; -CREATE TABLE Department( -DepNo int(10) PRIMARY KEY NOT NULL UNIQUE, -DepName VARCHAR(20) NOT NULL, -DepNote VARCHAR(50) -); -``` - -表1 Department表的定义 - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | -| DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | -| DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | - -表2 Teacher表的定义 - -```mysql -create table Teacher( -Number int primary key not null unique, -`Name` varchar(30) not null, -Sex VARCHAR(4), Birth date, -DepNo int, -Salary float, -Address VARCHAR(100), -foreign key(DepNo) references Department(DepNo) -); -``` - - - -| **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | -| ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | -| Number | 教工号 | int | 是 | 否 | 是 | 是 | -| Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | -| Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | -| Birth | 出生日期 | date | 否 | 否 | 否 | 否 | -| DepNo | 部门号 | int | 否 | 是 | 否 | 否 | -| Salary | 工资 | float | 否 | 否 | 否 | 否 | -| Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | - -3、添加记录 - -```mysql -insert into Department VALUES (601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'),(603,'艺术设计系','广告艺术设计等专业'),(604,'管理工程系','连锁经营管理等专业'); -``` - - - -| **DepNo** | **DepName** | **DepNote** | -| --------- | ----------- | ------------------ | -| 601 | 软件技术系 | 软件技术等专业 | -| 602 | 网络技术系 | 多媒体技术等专业 | -| 603 | 艺术设计系 | 广告艺术设计等专业 | -| 604 | 管理工程系 | 连锁经营管理等专业 | - -```mysql -insert into Teacher VALUES (2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'),(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'),(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'),(2004,'James','女','1980-10-20',602,3500,'四川省成都市'),(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); -``` - - - -| **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | -| ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | -| 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | -| 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | -| 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | -| 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | -| 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | - -4、用SELECT语句查询Teacher表的所有记录。 - -```mysql -select * FROM Teacher; -``` - - - - - diff --git "a/54 \345\217\266\345\255\220\350\261\252/mysql\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.md" "b/54 \345\217\266\345\255\220\350\261\252/mysql\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.md" deleted file mode 100644 index e12d2b2e94927614868bfde1c8c8aba1ed000951..0000000000000000000000000000000000000000 --- "a/54 \345\217\266\345\255\220\350\261\252/mysql\347\254\254\345\233\233\346\254\241\344\275\234\344\270\232.md" +++ /dev/null @@ -1,200 +0,0 @@ -# 笔记 - -7大字句 -1. from : 从哪些表中筛选 -2. on : 关联多表查询时,去除笛卡尔积 -3. where : 从表中筛选的条件 -4. group by : 分组依据 -5. having:在统计结果中再次筛选 -6. order by: 排序 -7. limit:分页 -必须按照(1)~(7)的顺序 编写字句 - -having子句也写条件 -where的条件是针对原表中的记录的筛选。where后面不能出现分组函数。 -having子句是对统计结果(分组函数计算后)的筛选。having可以加分组函数。 - -### 子查询 - -嵌套在其他sql语句中的查询语句 - -子查询通常先运行,所以要用()包括起来 - -子查询的运行结果可以作为其语句条件,数据源等 - -## select 1 from 2 where 3 - -# 作业 - -在如图的数据表上完成以下题目 -表一 - -~~~ sql -CREATE TABLE `stuinfo` ( - `stuN0` varchar(20) NOT NULL, - `stuName` varchar(20) DEFAULT NULL, - `stuSex` varchar(10) DEFAULT NULL, - `stuAge` int(11) DEFAULT NULL, - `stuAddress` varchar(20) DEFAULT NULL, - `stuseat` int(11) DEFAULT NULL, - PRIMARY KEY (`stuN0`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -~~~ - -表二 - -~~~ sql -CREATE TABLE `stuexam` ( - `examN0` int(11) NOT NULL, - `stuN0` varchar(20) DEFAULT NULL, - `wittenExam` int(11) DEFAULT NULL, - `labExam` int(11) DEFAULT NULL, - PRIMARY KEY (`examN0`), - KEY `stuN0` (`stuN0`), - CONSTRAINT `stuexam_ibfk_1` FOREIGN KEY (`stuN0`) REFERENCES `stuinfo` (`stuN0`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -~~~ - -表三 - -~~~ sql -CREATE TABLE `stumarks` ( - `examN0` int(11) DEFAULT NULL, - `stuID` varchar(20) DEFAULT NULL, - `score` int(11) DEFAULT NULL, - KEY `examN0` (`examN0`), - CONSTRAINT `stumarks_ibfk_1` FOREIGN KEY (`examN0`) REFERENCES `stuexam` (`examN0`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -~~~ - - -添加数据 - - -1. ~~~ sql - INSERT into stuinfo VALUES ('s2501','张秋利','男',20,'美国硅谷',1),('s2502','李斯文','女',18,'湖北武汉',2),('s2503','马文才','男',18,'湖南长沙',3),('s2504','欧阳俊雄','女',21,'湖北武汉',4),('s2505','梅超风','男',16,'湖北武汉',5),('s2506','陈旋风','男',19,'美国硅谷',6); - - ~~~sql - -2. - -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); - ~~~ - -3. - -~~~ sql -INSERT INTO stuMarks VALUES -(1,'s2501',88), -(2,'s2501',92), -(3,'s2501',53), -(4,'s2502',60), -(5,'s2502',99), -(6,'s2503',82); -~~~ - -1.查询出年龄比班上平均年龄大的学生的信息 - -~~~ sql -SELECT * from stuinfo where stuAge >(select avg(stuAge) from stuinfo); -~~~ - -2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) - -~~~ sql -select t.stuN0,t.stuName,t.stuSex,max(score) from stumarks s left join stuinfo t on s.stuID=t.stuN0 group by s.stuID; -~~~ - -3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) - -~~~ sql - -~~~ - -4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) - -~~~ sql -SELECT * from stuinfo where stuSex='男' and stuAge>=20; - -~~~ - -~~~ sql -SELECT * from stuinfo where stuAge=(SELECT stuAge from stuinfo where stuSex='男' and stuAge>=20); - -~~~ - - - -5.查询出年龄比所有男生年龄都大的女生的信息 - -~~~ sql -SELECT * from stuinfo where stuSex='女'and stuAge> all (SELECT stuAge from stuinfo where stuSex='男'); - -~~~ - - - -6.查询出所有选修课程都及格的学生的信息 (stuMarks) - -~~~ sql -SELECT * from stuinfo LEFT JOIN stumarks on stuinfo.stuN0=stumarks.stuID WHERE score>60 GROUP BY stuid; -~~~ - - - -7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - -~~~ sql -SELECT * from stuinfo a LEFT JOIN stumarks s on a.stuN0=s.stuID where s.score is not null; -~~~ - - - -8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) - -~~~ sql -SELECT * from stuinfo a LEFT JOIN stumarks s on a.stuN0=s.stuID where s.score is null; -~~~ - - - -9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) - -~~~ sql -SELECT * from stuinfo LEFT JOIN stumarks on stuinfo.stuN0=stumarks.stuID where score>90; -~~~ - - - -10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) - - - -11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) - -~~~ sql -SELECT a.* from stuinfo a LEFT JOIN stumarks s on a.stuN0=s.stuID where s.score >(SELECT score from stumarks where stuID='s2501') GROUP BY stuID; -~~~ - - - -12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) - -13.查询班上比所有男生年龄都要大的女生的信息 - -~~~ sql -SELECT * from stuinfo where stuSex='女'and stuAge> all (SELECT stuAge from stuinfo where stuSex='男'); -~~~ - -14.查询出只要比某个男生年龄大的女生的信息 - -~~~ sql -select * from stuinfo where stusex = '女' and stuage > (select min(stuage) from stuinfo where stusex = '男'); -~~~ - diff --git "a/56 \350\265\265\346\225\217/20230220 \344\275\234\344\270\232.md" "b/56 \350\265\265\346\225\217/20230220 \344\275\234\344\270\232.md" deleted file mode 100644 index 41255fa962813b42b2a72022ab7f193edbf75f52..0000000000000000000000000000000000000000 --- "a/56 \350\265\265\346\225\217/20230220 \344\275\234\344\270\232.md" +++ /dev/null @@ -1,39 +0,0 @@ --- 1、创建数据库test01_market - -create database test01_maeket charset utf8; --- --- 2、创建表格customers -use test01_maeket; -create table customers( -c_num int(11), -c_name varchar(50), -c_contact varchar(50), -c_city varchar(50), -c_birth date -); --- -| -- | 字段名 | 数据类型 | -| ------------------------------------------------------------ | --------- | ----------- | -| -- | c_num | int(11) | -| -- | c_name | varchar(50) | -| -- | c_contact | varchar(50) | -| -- | c_city | varchar(50) | -| -- | c_birth | date | -| -- | | | -| -- **要求3:**将c_contact字段移动到c_birth字段后面 | | | -| alter table customers modify c_contact varchar(50) after c_birth; | | | -| -- | | | -| -- **要求4:**将c_name字段数据类型改为 varchar(70) | | | -| alter table customers modify c_name varchar(70); | | | -| -- | | | -| -- **要求5:**将c_contact字段改名为c_phone | | | -| alter table customers change c_contact c_phone varchar(50); | | | -| -- | | | -| -- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) | | | -| alter table customers add c_gender char(1) after c_name; | | | -| -- | | | -| -- **要求7:**将表名改为customers_info | | | -| alter table customers rename to customers_info; | | | -| -- | | | -| -- **要求8:**删除字段c_city | | | -| alter table customers_info drop column c_city; | | | \ No newline at end of file diff --git "a/56 \350\265\265\346\225\217/20230220 \347\254\224\350\256\260.md" "b/56 \350\265\265\346\225\217/20230220 \347\254\224\350\256\260.md" deleted file mode 100644 index 8914a449210f65fbe2b0625c78751a890493f859..0000000000000000000000000000000000000000 --- "a/56 \350\265\265\346\225\217/20230220 \347\254\224\350\256\260.md" +++ /dev/null @@ -1,232 +0,0 @@ -1.不分大小写 - -2.一般以;结尾 - -3.库名,表名,字段名(列名),支持英文字母,_,数字 - -4.名称中不要用空格 - -5.名称中,不用sql语句的关键字 - -6.‘ “ `(反引号|飘号),用来标记名称 - -7.--注释,#注释内容,/* */多行注释,(ctel+/) - -8.数值直接写,不用符号包裹,字符串和时间数型用单引号包裹 - -### 数据类型 - -1.约束类型 - -2.规范数据空间的占用(内存) - -## 类型 - -#### 数值型 小数+整数 - -1.整形 int(M)这里的M不是限制长度,单独使用毫无意义,配合zerofill使用(补0) - -2.浮点 float(M,N) double(M,N) M表示限制整数+小数只能存放M长度,N限制小数的长度。如果小数的部分超过了N,会自动截断,并四舍五入。 - -3.定点 decimal(M,N) 默认(10,0),其他同上 - -#### 字符型 - -1.固定长度的 char 默认是1,最大是255 - -2.可变长度的 varchar(M) 这里的M不可缺省 - -#### 时间类型 - -1.data 年月日 - -2.time 时分秒 - -3.year 年 - -4.datatime - -5.timestamp 时间戳 - -#### enum枚举类型 - -类似单选框中的选项,只能选一个。 enum(1,2,3,4,5) - -#### set集合类型 - -类似多选框,可以选0个或是多个,但也只能选里面有的。set(1,2,3,4,5) - -### #一些数据库的属性 - -1.unsigned 无符号的,表示正数不能负数 - -2.null 允许为空。not null 不允许为空。 - -3.default 默认值 - -4.auto_increment 自增 - -## # DDL - -创建数据库 - -```MYSQL -create database 数据库名 charset 字符集; -``` - -查看所有数据库 - -```mysql -show databases; -``` - -查看数据库的定义语句 - -```mysql -show create database -``` - -修改数据库编码 - -```mysql -#修改数据库字符集和校对规则 -ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称 COLLATE 字符集对应校对规则; -``` - -删除数据库 - -```mysql -drop database 数据库名; -``` - -使用数据库 - -```mysql -use 数据库名; -``` - -查看数据库中的所有表格 - -```mysql -use 数据库名; -show tables; -或 -show tables from 数据库名; -``` - -创建表格 - -```mysql -create table 数据表名称( - 字段名 数据类型, - 字段名 数据类型 - ... -); -``` - -查看表的定义信息 - -```mysql -show create table 表名称; -``` - -查看表结构 - -```mysql -desc 表名称; -``` - -修改表名称 - -```mysql -alter table 旧表名 rename 【to】 新表名; -rename table 旧表名称 to 新表名称; -``` - -删除表格 - -```mysql -drop table 表名称; -``` - -删除字段 - -```mysql -alter table 表名称 drop 【column】 字段名称; -``` - -增加字段 - -```mysql -alter table 表名称 add 【column】 字段名称 数据类型; -alter table 表名称 add 【column】 字段名称 数据类型 first; -alter table 表名称 add 【column】 字段名称 数据类型 after 另一个字段; -``` - -修改字段的数据类型 - -```mysql -alter table 表名称 modify 【column】 字段名称 新的数据类型; -``` - -修改字段名称 - -```mysql -alter table 表名称 change 【column】 旧字段名称 新的字段名称 新的数据类型; -``` - -修改字段位置 - -```mysql -alter table 表名称 modify 【column】 字段名称 数据类型 first; -alter table 表名称 modify 【column】 字段名称 数据类型 after 另一个字段; -``` - -# DML - -添加一条记录到表中 - -```mysql -insert into 表名称 values(值列表);#值列表中的值的顺序、类型、个数必须与表结构一一对应 - -insert into 表名称 (字段列表) values(值列表); -``` - -添加多条记录到表中 - -```mysql -insert into 表名称 values(值列表),(值列表),(值列表); #值列表中的值的顺序、类型、个数必须与表结构一一对应 - -insert into 表名称 (字段列表) values(值列表),(值列表),(值列表); -``` - -修改所有行 - -```mysql -update 表名称 set 字段名 = 值, 字段名 = 值; #给所有行修改 -``` - -修改部分行 - -```mysql -update 表名称 set 字段名 = 值, 字段名 = 值 where 条件; #给满足条件的行修改 -``` - -删除部分行的数据 - -```mysql -delete from 表名称 where 条件; -``` - -删除整张表的数据,表结构留下 - -```mysql -delete from 表名称; -``` - -截断表,清空表中的数据,只留有表结构 - -```mysql -truncate 表名称; -``` - diff --git "a/56 \350\265\265\346\225\217/20230223 \344\275\234\344\270\232.md" "b/56 \350\265\265\346\225\217/20230223 \344\275\234\344\270\232.md" deleted file mode 100644 index 6a3de430bf073dc78e5d22628d3a0bb48d1b6e71..0000000000000000000000000000000000000000 --- "a/56 \350\265\265\346\225\217/20230223 \344\275\234\344\270\232.md" +++ /dev/null @@ -1,203 +0,0 @@ -``` - - --- ## 第1题 --- --- 1、创建数据库test01_company -create database test01_company charset utf8; --- --- 2、创建表格offices -use test01_company; -create table offices( -officecode int, -city varchar(30), -address varchar(50), -country varchar(50), -postalcode varchar(25) -); --- --- | 字段名 | 数据类型 | --- | ---------- | ----------- | --- | officeCode | int | --- | city | varchar(30) | --- | address | varchar(50) | --- | country | varchar(50) | --- | postalCode | varchar(25) | --- --- 3、创建表格employees -create table employees( -empnum int, -lastname varchar(50), -firstname varchar(50), -mobile varchar(25), -code int, -jobtitle varchar(50), -birth date, -note varchar(255), -sex varchar(5) -); --- --- | 字段名 | 数据类型 | --- | --------- | ------------- | --- | empNum | int(11) | --- | lastName | varchar(50) | --- | firstName | varchar(50) | --- | mobile | varchar(25) | --- | code | int | --- | jobTitle | varchar(50) | --- | birth | date | --- | Note | varchar(255) | --- | Sex | varchar(5) | --- --- **要求4:**将表employees的mobile字段修改到code字段后面。 -desc employees; -alter table employees modify mobile varchar(25) after code; --- --- **要求5:**将表employees的birth字段改名为birthday; -alter table employees change birth birthday date; --- --- **要求6:**修改sex字段,数据类型为char(1)。 -alter table employees modify sex char(1); --- --- **要求7:**删除字段note; -alter table employees drop column note; --- --- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); -alter table employees add favoriate_activity varchar(100); --- --- **要求9:**将表employees的名称修改为 employees_info -alter table employees rename to employees_info; --- --- ```mysql --- --- ``` --- -``` - - - -``` --- ## 第2题 --- --- 1、创建数据库test02db -create database test02db charset utf8; --- --- 2、创建表格pet -use test02db; -create table pet( -name varchar(20), -owner varchar(20), -species varchar(20), -sex char(1), -birth year, -death year -); --- --- | 字段名 | 字段说明 | 数据类型 | --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | --- --- 3、添加记录 -insert into pet values ('fluffy','harold','cat','f','2003','2010'),('claws','gwen','cat','m','2004',null),('buffy',null,'dog','f','2009',null),('fang','benny','dog','m','2000',null),('bowser','diane','dog','m','2003','2009'),('chirpy',null,'bird','f','2008',null); --- --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | --- --- 4、 添加字段主人的生日owner_birth。 -alter table pet add owner_birth year after owner; --- --- 5、 将名称为Claws的猫的主人改为kevin -update pet set owner = kevin where name = 'claws'; --- --- 6、 将没有死的狗的主人改为duck -update pet set owner = duck where death = null; --- --- 7、 查询没有主人的宠物的名字; --- --- 8、 查询已经死了的cat的姓名,主人,以及去世时间; --- --- 9、 删除已经死亡的狗 -delete from pet where death = not null; --- --- 10、查询所有宠物信息 -select * from pet; -``` - -``` --- ## 第4题 --- --- 1、创建一个数据库:test04_school -create database test04_school charset utf8; --- --- 2、创建如下表格 -use test04_school; --- --- 表1 Department表的定义 -create table department( -depno int(10) not null primary key, -depname varchar(20) not null, -depnote varchar(50) -); --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | --- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | --- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | --- --- 表2 Teacher表的定义 -create table teacher( -number int not null primary key, -name varchar(30) not null, -sex varchar(4), -birth date, -depno int foreign key (depno) references department(depno), -salary float, -address varchar(100) -); --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | Number | 教工号 | int | 是 | 否 | 是 | 是 | --- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | --- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | --- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | --- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | --- | Salary | 工资 | float | 否 | 否 | 否 | 否 | --- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | --- --- 3、添加记录 -insert into department values (601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'),(603,'艺术设计系','广告艺术设计等专业'),(604,'管理工程系','连锁经营管理等专业'); --- --- | **DepNo** | **DepName** | **DepNote** | --- | --------- | ----------- | ------------------ | --- | 601 | 软件技术系 | 软件技术等专业 | --- | 602 | 网络技术系 | 多媒体技术等专业 | --- | 603 | 艺术设计系 | 广告艺术设计等专业 | --- | 604 | 管理工程系 | 连锁经营管理等专业 | - -insert into teacher values (2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'),(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'),(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'),(2004,'James','女','1980-10-20',602,3500,'四川省成都市'),(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); --- --- | **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | --- | ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | --- | 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | --- | 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | --- | 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | --- | 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | --- | 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | --- --- 4、用SELECT语句查询Teacher表的所有记录。 -select * from teacher; -``` - diff --git "a/56 \350\265\265\346\225\217/20230223 \347\272\246\346\235\237\347\254\224\350\256\260.md" "b/56 \350\265\265\346\225\217/20230223 \347\272\246\346\235\237\347\254\224\350\256\260.md" deleted file mode 100644 index 71fed284e2bf7915f2fb63e5e62d2a02e1e57bc9..0000000000000000000000000000000000000000 --- "a/56 \350\265\265\346\225\217/20230223 \347\272\246\346\235\237\347\254\224\350\256\260.md" +++ /dev/null @@ -1,17 +0,0 @@ -``` -约束,数据类型就是一种对数据的约束, - -``` - -1 非空约束 not null 必填。 - -2 默认约束 default 当你不给 系统会自动以默认值填充。 - -3 主键约束 primary key ,非空 唯一 同样一个表中只能有一个主键。 - -4 唯一约束 unique key ,不能重复,可以为空。 - -5 自增约束 不给值 给0或null 值 会自动在原来的最大数值上加1 - -6 外键约束 若给值 以给的值为准。1 - diff --git "a/56 \350\265\265\346\225\217/20230226 \350\277\220\347\256\227\347\254\246\344\275\234\344\270\232.md" "b/56 \350\265\265\346\225\217/20230226 \350\277\220\347\256\227\347\254\246\344\275\234\344\270\232.md" deleted file mode 100644 index c4f198eddccf6adb582c2fd26369429b4b7bf198..0000000000000000000000000000000000000000 --- "a/56 \350\265\265\346\225\217/20230226 \350\277\220\347\256\227\347\254\246\344\275\234\344\270\232.md" +++ /dev/null @@ -1,240 +0,0 @@ -作业 - -```MySQL -drop table if exists user_profile; -create database zy charset utf8; -use zy; -CREATE TABLE `user_profile` ( -`id` int, -`device_id` int, -`gender` varchar(14), -`age` int , -`university` varchar(32), -`province` varchar(32) -); -INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing'); -INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai'); -INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing'); -INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang'); -INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong'); --- (1)题目:从用户信息表中取出学校的去重数据 -SELECT university FROM user_profile; -select distinct `university` from user_profile; --- (2)题目:查看用户明细设备ID数据,并将列名显示为 'user_infos_example' -select device_id as user_infos_example from user_profile; --- (3)题目:查询university是北京大学的设备ID -select device_id,university from user_profile where university = '北京大学'; --- (4)题目:查询年龄大于24用户的设备ID、性别、年龄、学校 -select device_id,gender,age,university from user_profile where age >24; --- (5)题目:查询所有用户的设备id、性别、年龄、学校 -select device_id,gender,age,university from user_profile; --- (6)题目:查询所有用户的数据 -select * from user_profile; --- (7)题目:查询省份是"shanghai"的用户信息 -select * from user_profile where province = 'Shanghai'; --- (8)题目:查询所有男性用户的设备ID、年龄、学校 -select device_id,age,university from user_profile where gender = 'male'; --- (9)题目:从用户信息表中取出省份的去重数据 -SELECT province FROM user_profile; -select distinct province from user_profile -``` - -```MySQL -drop table if exists user_profile; -create database zy2 charset utf8; -use zy2; -CREATE TABLE `user_profile` ( -`id` int, -`device_id` int, -`gender` varchar(14), -`age` int , -`university` varchar(32), -`province` varchar(32)); - -INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing'); -INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai'); -INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing'); -INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang'); -INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong'); - --- (1)题目:查询年龄20岁及以上且23岁及以下用户的设备ID、性别、年龄 -select device_id,gender,age from user_profile where age>=20 and age<=23; --- (2)题目:查询除复旦大学以外的所有用户的设备ID、性别、年龄、大学 -select device_id,gender,age,university from user_profile where university != '复旦大学'; --- (3)题目:查询年龄不为空的用户的设备ID,性别,年龄,学校的信息 -select device_id,gender,age,university from user_profile where age is not null; -``` - -```mysql --- ## 第1题:员工表 -create database zy1 charset utf8; -use zy1; - -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); --- -select * from employee; --- --- **要求1:**查询出薪资在12000~13000之间的员工信息。 -select * from employee where salary between 12000 AND 13000; --- --- **要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 -select id,`name`,addr from employee where `name` like '%刘%'; --- --- **要求3:**将“李四”的家庭住址改为“广东韶关” -update employee set addr = '广东韶关' where name ='李四'; --- --- **要求4:**查询出名字中带“小”的员工 -select * from employee where `name` like '%小%'; --- --- **要求5:**查询出薪资高于11000的男员工信息 -select * from employee where sex = '男' and salary >11000; --- --- **要求6:**查询没有登记电话号码的员工 -select * from employee where tel is null; --- --- **要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 -select * from employee where sex = '男' and (salary >12000 or (addr = '广东深圳' and addr = '广东广州')); --- --- **要求8:**查询每个员工的年薪,显示“姓名、年薪” -select `name`,salary from employee; -``` - -```MySQL --- ## 第2题:国家信息表 --- --- countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 --- -create database zy2 charset utf8; -use zy2; - DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); --- --- **要求1:** 查询大国 的国家名称、人口和面积。 -select `name`,population,`area` FROM `countries_info` where `area` >= 3000000 and population >= 25000000; --- --- 如果一个国家满足下述两个条件之一,则认为该国是 大国 : --- --- - 面积至少为 300万平方公里(即,3000000 km2) --- --- - 人口至少为 2500 万(即 25000000) --- --- **要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 -select * from `countries_info` where `continent` = 'Asia'; --- --- **要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 -select * from `countries_info` where `area`<10000 and population < 100000; --- --- **要求4:**查询国家名字中包含“o“字母的国家信息 -select * from `countries_info` where `name` like '%o%'; --- --- **要求5:**查询GDP值超过10000000000的国家信息 -select * from `countries_info` where gdp >= 10000000000; --- --- **要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” -select `name`,population,gdp,gdp/population '人均gdp' from `countries_info`; --- --- **要求7:**查询人均贡献GDP值低于1000的国家信息。 -select * from `countries_info` where gdp/population < 1000; --- --- **要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” -select `name`,`area`,population,`area`/population '人均国土面积' from `countries_info`; -``` - -笔记 - -``` -# 笔记 - -## DQL - -select语句的基本语法: select 常量; select 表达式; select 函数; - -例:select 1; select 9/2; select NOW(); - -1.从数据中筛选数据的格式: select 字段列表 from 表名称;【where 条件;】 - -2.使用别名: - - 格式:select 字段名 【as】别名 from 表名称 【as】 别名; - - --列的别名有空格时,加双引号。没有时,可加可不加。 - - --表的别名不能加双引号,表的别名中不加空格。 - -3.结果去重: distinct - - 格式: select distinct 字段列表 from 表名称 【where 条件】; - - --distinct只能发在第一个字段前面 --它只支持一个字段。 - -## 运算符 - -1.算数运算符: - -加 + ,减 - , 乘 * ,除 / 或div , (div只保留整数部分) , 模(余) % ,mod - -2.比较运算符: - -大于 > ,小于 < , 大于等于 >= , 小于等于 <= , 等于 = , 不等于 != 。 (等于与不等于不能用于null计算) - -3.区间运算符: - - 区间范围: between x and y not between x and y - - 集合范围: in(x,y,z) not in (x,y,z) # between....and ......(结果包含两边边界) - -4.模糊比较运算符: - - %:代表任意个字符 _:代表一个字符,几个下划线就代表几个字符。 - - 格式:select * from 表名 where 字段名 ' '; - - #查询当前mysql数据库在字符集情况:show variables like ‘%character%’ - -5.逻辑运算符: - - 与: && 或 and - - 或: || 或or - - 非: !或者not - - 异或:xor - -6.关于null值的问题: - -​ 1.判断时: xx is null xx is not null xx<=>null - -​ 2.计算时: if null (xx,代替值) 当xx是null时,用替代值算 -``` - diff --git "a/56 \350\265\265\346\225\217/20230309 \345\255\220\346\237\245\350\257\242 .md" "b/56 \350\265\265\346\225\217/20230309 \345\255\220\346\237\245\350\257\242 .md" deleted file mode 100644 index 74af8057bc6bc288cbddb56c8d19755304580b10..0000000000000000000000000000000000000000 --- "a/56 \350\265\265\346\225\217/20230309 \345\255\220\346\237\245\350\257\242 .md" +++ /dev/null @@ -1,125 +0,0 @@ -笔记 - -``` -子查询 - -- 嵌套在其他SQL语句中的查询语句。 -- 子查询通常先运行,所以要用()包裹起来。 -- 子查询的运行结果,可以作为其他语句的条件,数据源等。 - -子查询分三种形式 - - select 1 from 2 where 3 - - 1.放在select后面 - - 2.放在where/having后面 - - 3.放在from后面,子查询当做一个临时的表使用,必须要给别名。 - - - -where或having后的子查询,其子查询的结果有三种形式 - - 1.单列单个值,可以直接使用比较运算符 - - 2.单列多个值,可以使用 in ,not in 进行比较 - - 3.单列多个值,可以使用比较运算符,搭配any,all,等关键字与查询结果 子查询结果是单列,可以放在select参与运算,或者是作为字段,也可以放在where / having后当条件。 - -子查询结果是多列,多个值,只能放在from后面当临时表使用,并且必须取别名。 -``` - - - -作业 - -```MySQL - -CREATE DATABASE mn CHARSET utf8; -USE mn; -CREATE table stuinfo( -stuNo varchar(10000), -stuname varchar(5), -stusex varchar(2), -stuage int(3), -stuaddress varchar (10), -stuseat int - - ); -CREATE table stuexam ( -examno int, -stuno varchar(90), -writtrnexam int, -labexam int -) ; - -CREATE table stumarks( -examno int, -stuid varchar(90), -score int -); - INSERT into stuinfo VALUES - ('s2501','张秋利','男', 20,'美国硅谷',1), - ('s2502','李思文','女',18,'武汉湖北',2), - ('s2503','马文才','男',18,'湖南长沙',3), - ('s2504','欧阳俊雄','女',21,'湖北武汉',4), - ('s2505','梅超风','男',16,'湖北武汉',5), - ('s2506','陈旋风','男',19,'美国硅谷',6); - - 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); - - insert into stumarks VALUES - (1,'s2501',88), - (2,'s2502',92), - (3,'s2503',53), - (4,'s2504',60), - (5,'s2505',99), - (6,'s2506',82); - - - -- 在如图的数据表上完成以下题目 --- --- 1.查询出年龄比班上平均年龄大的学生的信息 - select * from stuinfo where stuage >(select avg(stuage ) from stuinfo); - --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) -select --- --- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) - --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) -select * from stuinfo where stusex = '男' and stuage >=20; - --- 5.查询出年龄比所有男生年龄都大的女生的信息 -select * from stuinfo where stusex = '女' and stuage = (select max(stuage) from stuinfo); - --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) --- --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) --- --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) --- --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) --- --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) --- --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) --- --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) - - --- 13.查询班上比所有男生年龄都要大的女生的信息 - -select * from stuinfo where stusex = '女' and stuage = (select max(stuage) from stuinfo); - --- 14.查询出只要比某个男生年龄大的女生的信息 -select * from stuinfo where stusex = '女' and stuage > (select min(stuage) from stuinfo where stusex = '男'); -``` - diff --git "a/57 \351\273\204\346\265\201\346\266\233/20230219 DDL,DML\350\257\255\345\217\245\347\273\203\344\271\240.md" "b/57 \351\273\204\346\265\201\346\266\233/20230219 DDL,DML\350\257\255\345\217\245\347\273\203\344\271\240.md" deleted file mode 100644 index c42ac3cf92c6c06b38961bec44a017244e93c551..0000000000000000000000000000000000000000 --- "a/57 \351\273\204\346\265\201\346\266\233/20230219 DDL,DML\350\257\255\345\217\245\347\273\203\344\271\240.md" +++ /dev/null @@ -1,263 +0,0 @@ -# 作业 - -### 作业1 - -```mysql --- ## 第1题 --- --- 1、创建数据库test01_market -create database test01_maeket charset utf8; --- --- 2、创建表格customers -use test01_maeket; -create table customers( -c_num int(11), -c_name varchar(50), -c_contact varchar(50), -c_city varchar(50), -c_birth date -); --- --- | 字段名 | 数据类型 | --- | --------- | ----------- | --- | c_num | int(11) | --- | c_name | varchar(50) | --- | c_contact | varchar(50) | --- | c_city | varchar(50) | --- | c_birth | date | --- --- **要求3:**将c_contact字段移动到c_birth字段后面 -alter table customers modify c_contact varchar(50) after c_birth; --- --- **要求4:**将c_name字段数据类型改为 varchar(70) -alter table customers modify c_name varchar(70); --- --- **要求5:**将c_contact字段改名为c_phone -alter table customers change c_contact c_phone varchar(50); --- --- **要求6:**增加c_gender字段到c_name后面,数据类型为char(1) -alter table customers add c_gender char(1) after c_name; --- --- **要求7:**将表名改为customers_info -alter table customers rename to customers_info; --- --- **要求8:**删除字段c_city -alter table customers_info drop column c_city; -``` - - - -### 作业2 - -```mysql --- ## 第2题 --- --- 1、创建数据库test02_library -create database test02_library charset utf8; --- --- 2、创建表格books -use test02_library; -create table books( -b_id int(11), -b_name varchar(50), -authors varchar(100), -price float, -pubdate year, -note varchar(100), -num int(11) -); --- --- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | --- | ------- | -------- | ------------- | -------- | ---- | --- | b_id | 书编号 | int(11) | 否 | 是 | --- | b_name | 书名 | varchar(50) | 否 | 否 | --- | authors | 作者 | varchar(100) | 否 | 否 | --- | price | 价格 | float | 否 | 否 | --- | pubdate | 出版日期 | year | 否 | 否 | --- | note | 说明 | varchar(100) | 是 | 否 | --- | num | 库存 | int(11) | 否 | 否 | --- --- 3、向books表中插入记录 --- --- 1) 指定所有字段名称插入第一条记录 -insert into books (b_id,b_name,authors,price,pubdate,note,num) values (1,'TalofAAA','Dickes',23,'1995','nove1',11); --- --- 2)不指定字段名称插入第二记录 -insert into books values (2,'EmmaT','janelure',35,'1993','joke',22); --- --- 3)同时插入多条记录(剩下的所有记录) -insert into books values (3,'StoryofJane','JaneTim',40,'2001','novel',0),(4,'LoveyDay','GeorgeByron',20,'2005','novel',30),(5,'Oldland','HonoreBlade',30,'2010','law',0),(6,'TheBattle','UptonSara',30,'1999','medicine',40),(7,'RoseHood','Richardhaggard',28,'2008','cartoon',28); --- --- | b_id | b_name | authors | price | pubdate | note | num | --- | ---- | ------------- | --------------- | ----- | ------- | -------- | ---- | --- | 1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 | --- | 2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 | --- | 3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 | --- | 4 | Lovey Day | George Byron | 20 | 2005 | novel | 30 | --- | 5 | Old land | Honore Blade | 30 | 2010 | law | 0 | --- | 6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 | --- | 7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 | --- --- 4、将小说类型(novel)的书的价格都增加5。 -update books set price = price+5 where note='novel'; --- --- 5、将名称为EmmaT的书的价格改为40。 -update books set price = 40 where b_name='EmmaT'; --- --- 6、删除库存为0的记录 -delete from books where num=0; -``` - - - -### 作业3 - -```mysql --- ## 第3题 --- --- 1、创建数据库test03_bookstore -create database test03_bookstore charset utf8; --- --- 2、创建book表 -use test03_bookstore; -create table book( -id int(11), -title varchar(100), -author varchar(100), -price double(11,2), -sales int(11), -stock int(11), -img_path varchar(100) -); --- --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | sales | int(11) | NO | | NULL | | --- | stock | int(11) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----+-------------+------------+-------+-------+-------+----------------------------+ --- | id | title | author | price | sales | stock | img_path | --- +----+-------------+------------+-------+-------+-------+-----------------------------+ --- | 1 | 解忧杂货店 | 东野圭吾 | 27.20 | 102 | 98 | upload/books/解忧杂货店.jpg | --- | 2 | 边城 | 沈从文 | 23.00 | 102 | 98 | upload/books/边城.jpg | --- +----+---------------+------------+-------+-------+-------+----------------------------+ --- ``` -insert into book values (1,'解忧杂货店','东野圭吾',27.2,102,98,'upload/books/解忧杂货店.jpg'),(2,'边城','沈从文',23.00,102,98,'upload/books/边城.jpg'); --- --- 3、创建用户表users,并插入数据 -create table users( -id int(11), -unername varchar(100), -password varchar(100), -email varchar(100) -); --- --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | username | varchar(100) | NO | UNI | NULL | | --- | password | varchar(100) | NO | | NULL | | --- | email | varchar(100) | YES | | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----+----------+----------------------------------+--------------------+ --- | id | username | password | email | --- +----+----------+----------------------------------+--------------------+ --- | 1 | admin | 112233 | admin@mxdx.com | --- +----+----------+----------------------------------+--------------------+ --- ``` -insert into users values (1,'admin','112233','admin@mxdx.com'); --- --- 4、创建订单表orders -create table orders( -id varchar(100), -order_time datetime, -total_count int(11), -total_amount double(11,2), -state int(11), -user_id int(11) -); --- --- ```mysql --- +--------------+--------------+------+-----+---------+-------+ --- | Field | Type | Null | Key | Default | Extra | --- +--------------+--------------+------+-----+---------+-------+ --- | id | varchar(100) | NO | PRI | NULL | | --- | order_time | datetime | NO | | NULL | | --- | total_count | int(11) | NO | | NULL | | --- | total_amount | double(11,2) | NO | | NULL | | --- | state | int(11) | NO | | NULL | | --- | user_id | int(11) | NO | MUL | NULL | | --- +--------------+--------------+------+-----+---------+-------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | id | order_time | total_count | total_amount | state | user_id | --- +----------------+---------------------+-------------+--------------+-------+---------+ --- | 15294258455691 | 2018-06-20 00:30:45 | 2 | 50.20 | 0 | 1 | --- +----------------+---------------------+-------------+--------------+-------+---------+ --- ``` -insert into orders values ('15294258455691','2018-06-20 00:30:45',2,50.20,0,1); --- --- 5、创建订单明细表order_items -create table order_items( -id int(11), -count int(11), -amount double(11,2), -title varchar(100), -author varchar(100), -price double(11,2), -img_path varchar(100), -order_id varchar(100) -); --- --- ```mysql --- +----------+--------------+------+-----+---------+----------------+ --- | Field | Type | Null | Key | Default | Extra | --- +----------+--------------+------+-----+---------+----------------+ --- | id | int(11) | NO | PRI | NULL | auto_increment | --- | count | int(11) | NO | | NULL | | --- | amount | double(11,2) | NO | | NULL | | --- | title | varchar(100) | NO | | NULL | | --- | author | varchar(100) | NO | | NULL | | --- | price | double(11,2) | NO | | NULL | | --- | img_path | varchar(100) | NO | | NULL | | --- | order_id | varchar(100) | NO | MUL | NULL | | --- +----------+--------------+------+-----+---------+----------------+ --- ``` --- --- 尝试添加部分模拟数据,参考示例如下: --- --- ```mysql --- +----+-------+--------+---------+---------+-------+----------------+----------------+ --- | id |count| amount| title | author | price | img_path | order_id | --- +----+-------+--------+------------+----------+-------+----------------+----------------+ --- | 1 | 1 | 27.20| 解忧杂货店 | 东野圭吾 | 27.20 | static/img/default.jpg|15294258455691 | --- | 2 | 1 | 23.00| 边城 | 沈从文 | 23.00 | static/img/default.jpg|15294258455691 | --- +----+-------+--------+------------+----------+-------+------------+----------------+ --- ``` -insert into order_items values (1,1,27.20,'解忧杂货店','东野圭吾',27.20,'static/img/default.jpg','15294258455691'),(2,1,23.00,'边城','沈从文',23.00,'static/img/default.jpg','15294258455691'); --- -``` - diff --git "a/57 \351\273\204\346\265\201\346\266\233/20230219 mysql\347\254\224\350\256\260.md" "b/57 \351\273\204\346\265\201\346\266\233/20230219 mysql\347\254\224\350\256\260.md" deleted file mode 100644 index 7b550872a46d47b9abfba21bf7cd7bb56b104ab7..0000000000000000000000000000000000000000 --- "a/57 \351\273\204\346\265\201\346\266\233/20230219 mysql\347\254\224\350\256\260.md" +++ /dev/null @@ -1,234 +0,0 @@ -# MySQL语法 - -1.不分大小写 - -2.一般以;结尾 - -3.库名,表名,字段名(列名),支持英文字母,_,数字 - -4.名称中不要用空格 - -5.名称中,不用sql语句的关键字 - -6.‘ “ `(反引号|飘号),用来标记名称 - -7.--注释,#注释内容,/* */多行注释,(ctel+/) - -8.数值直接写,不用符号包裹,字符串和时间数型用单引号包裹 - -### 数据类型 - -1.约束类型 - -2.规范数据空间的占用(内存) - -## 类型 - -#### 数值型 小数+整数 - -1.整形 int(M)这里的M不是限制长度,单独使用毫无意义,配合zerofill使用(补0) - -2.浮点 float(M,N) double(M,N) M表示限制整数+小数只能存放M长度,N限制小数的长度。如果小数的部分超过了N,会自动截断,并四舍五入。 - -3.定点 decimal(M,N) 默认(10,0),其他同上 - -#### 字符型 - -1.固定长度的 char 默认是1,最大是255 - -2.可变长度的 varchar(M) 这里的M不可缺省 - -#### 时间类型 - -1.data 年月日 - -2.time 时分秒 - -3.year 年 - -4.datatime - -5.timestamp 时间戳 - -#### enum枚举类型 - -类似单选框中的选项,只能选一个。 enum(1,2,3,4,5) - -#### set集合类型 - -类似多选框,可以选0个或是多个,但也只能选里面有的。set(1,2,3,4,5) - -### #一些数据库的属性 - -1.unsigned 无符号的,表示正数不能负数 - -2.null 允许为空。not null 不允许为空。 - -3.default 默认值 - -4.auto_increment 自增 - -## # DDL - -创建数据库 - -```MYSQL -create database 数据库名 charset 字符集; -``` - -查看所有数据库 - -```mysql -show databases; -``` - -查看数据库的定义语句 - -```mysql -show create database -``` - -修改数据库编码 - -```mysql -#修改数据库字符集和校对规则 -ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称 COLLATE 字符集对应校对规则; -``` - -删除数据库 - -```mysql -drop database 数据库名; -``` - -使用数据库 - -```mysql -use 数据库名; -``` - -查看数据库中的所有表格 - -```mysql -use 数据库名; -show tables; -或 -show tables from 数据库名; -``` - -创建表格 - -```mysql -create table 数据表名称( - 字段名 数据类型, - 字段名 数据类型 - ... -); -``` - -查看表的定义信息 - -```mysql -show create table 表名称; -``` - -查看表结构 - -```mysql -desc 表名称; -``` - -修改表名称 - -```mysql -alter table 旧表名 rename 【to】 新表名; -rename table 旧表名称 to 新表名称; -``` - -删除表格 - -```mysql -drop table 表名称; -``` - -删除字段 - -```mysql -alter table 表名称 drop 【column】 字段名称; -``` - -增加字段 - -```mysql -alter table 表名称 add 【column】 字段名称 数据类型; -alter table 表名称 add 【column】 字段名称 数据类型 first; -alter table 表名称 add 【column】 字段名称 数据类型 after 另一个字段; -``` - -修改字段的数据类型 - -```mysql -alter table 表名称 modify 【column】 字段名称 新的数据类型; -``` - -修改字段名称 - -```mysql -alter table 表名称 change 【column】 旧字段名称 新的字段名称 新的数据类型; -``` - -修改字段位置 - -```mysql -alter table 表名称 modify 【column】 字段名称 数据类型 first; -alter table 表名称 modify 【column】 字段名称 数据类型 after 另一个字段; -``` - -# DML - -添加一条记录到表中 - -```mysql -insert into 表名称 values(值列表);#值列表中的值的顺序、类型、个数必须与表结构一一对应 - -insert into 表名称 (字段列表) values(值列表); -``` - -添加多条记录到表中 - -```mysql -insert into 表名称 values(值列表),(值列表),(值列表); #值列表中的值的顺序、类型、个数必须与表结构一一对应 - -insert into 表名称 (字段列表) values(值列表),(值列表),(值列表); -``` - -修改所有行 - -```mysql -update 表名称 set 字段名 = 值, 字段名 = 值; #给所有行修改 -``` - -修改部分行 - -```mysql -update 表名称 set 字段名 = 值, 字段名 = 值 where 条件; #给满足条件的行修改 -``` - -删除部分行的数据 - -```mysql -delete from 表名称 where 条件; -``` - -删除整张表的数据,表结构留下 - -```mysql -delete from 表名称; -``` - -截断表,清空表中的数据,只留有表结构 - -```mysql -truncate 表名称; -``` - diff --git "a/57 \351\273\204\346\265\201\346\266\233/20230221 \344\275\234\344\270\232.md" "b/57 \351\273\204\346\265\201\346\266\233/20230221 \344\275\234\344\270\232.md" deleted file mode 100644 index e9244ecff2faf23c22501f2fd6b8f20fde6c46bc..0000000000000000000000000000000000000000 --- "a/57 \351\273\204\346\265\201\346\266\233/20230221 \344\275\234\344\270\232.md" +++ /dev/null @@ -1,295 +0,0 @@ -# 作业 - -### 作业1 - -``` mysql --- ## 第1题 --- --- 1、创建数据库test01_company -create database test01_company charset utf8; --- --- 2、创建表格offices -use test01_company; -create table offices( -officecode int, -city varchar(30), -address varchar(50), -country varchar(50), -postalcode varchar(25) -); --- --- | 字段名 | 数据类型 | --- | ---------- | ----------- | --- | officeCode | int | --- | city | varchar(30) | --- | address | varchar(50) | --- | country | varchar(50) | --- | postalCode | varchar(25) | --- --- 3、创建表格employees -create table employees( -empnum int, -lastname varchar(50), -firstname varchar(50), -mobile varchar(25), -code int, -jobtitle varchar(50), -birth date, -note varchar(255), -sex varchar(5) -); --- --- | 字段名 | 数据类型 | --- | --------- | ------------- | --- | empNum | int(11) | --- | lastName | varchar(50) | --- | firstName | varchar(50) | --- | mobile | varchar(25) | --- | code | int | --- | jobTitle | varchar(50) | --- | birth | date | --- | Note | varchar(255) | --- | Sex | varchar(5) | --- --- **要求4:**将表employees的mobile字段修改到code字段后面。 -desc employees; -alter table employees modify mobile varchar(25) after code; --- --- **要求5:**将表employees的birth字段改名为birthday; -alter table employees change birth birthday date; --- --- **要求6:**修改sex字段,数据类型为char(1)。 -alter table employees modify sex char(1); --- --- **要求7:**删除字段note; -alter table employees drop column note; --- --- **要求8:**增加字段名favoriate_activity,数据类型为varchar(100); -alter table employees add favoriate_activity varchar(100); --- --- **要求9:**将表employees的名称修改为 employees_info -alter table employees rename to employees_info; --- --- ```mysql --- --- ``` --- -``` - -### 作业2 - -``` mysql --- ## 第2题 --- --- 1、创建数据库test02db -create database test01db charset utf8; --- --- 2、创建表格pet -use test01db; -create table pet( -name varchar(20), -owner varchar(20), -species varchar(20), -sex char(1), -birth year, -death year -); --- --- | 字段名 | 字段说明 | 数据类型 | --- | ------- | -------- | ----------- | --- | name | 宠物名称 | varchar(20) | --- | owner | 宠物主人 | varchar(20) | --- | species | 种类 | varchar(20) | --- | sex | 性别 | char(1) | --- | birth | 出生日期 | year | --- | death | 死亡日期 | year | --- --- 3、添加记录 -insert into pet values ('fluffy','harold','cat','f','2003','2010'),('claws','gwen','cat','m','2004',null),('buffy',null,'dog','f','2009',null),('fang','benny','dog','m','2000',null),('bowser','diane','dog','m','2003','2009'),('chirpy',null,'bird','f','2008',null); --- --- | name | owner | species | sex | birth | death | --- | ------ | ------ | ------- | ---- | ----- | ----- | --- | Fluffy | harold | Cat | f | 2003 | 2010 | --- | Claws | gwen | Cat | m | 2004 | | --- | Buffy | | Dog | f | 2009 | | --- | Fang | benny | Dog | m | 2000 | | --- | bowser | diane | Dog | m | 2003 | 2009 | --- | Chirpy | | Bird | f | 2008 | | --- --- 4、 添加字段主人的生日owner_birth。 -alter table pet add owner_birth year after owner; --- --- 5、 将名称为Claws的猫的主人改为kevin -update pet set owner = kevin where name = 'claws'; --- --- 6、 将没有死的狗的主人改为duck -update pet set owner = duck where death = null; --- --- 7、 查询没有主人的宠物的名字; --- --- 8、 查询已经死了的cat的姓名,主人,以及去世时间; --- --- 9、 删除已经死亡的狗 -delete from pet where death = not null; --- --- 10、查询所有宠物信息 -select * from pet; -``` - -### 作业3 - -``` mysql --- ## 第3题 --- --- 1、创建数据库:test03_company --- --- ```sql -create database test03_company charset utf8; --- ``` --- --- 2、在此数据库下创建如下3表,数据类型,宽度,是否为空根据实际情况自己定义。 --- --- A. 部门表(department):部门编号(depid),部门名称(depname),部门简介(deinfo);其中部门编号为主键。 --- --- ```mysql -use test03_company ; -create table department( - depid int primary key auto_increment, - depname char(10) not null unique key, - deinfo varchar(200) -); --- ``` --- --- B. 雇员表(employee):雇员编号(empid),姓名(name),性别(sex),职称(title),出生日期(birthday),所在部门编号(depid);其中 --- --- * ​ 雇员编号为主键; --- * ​ 部门编号为外键,外键约束等级为(on update cascade 和on delete set null); --- * ​ 性别默认为男; --- --- ```mysql -create table employee ( - empid int primary key auto_increment, - name varchar(10) not null, - sex enum('男','女') not null default '男', - title varchar(10), - birthday date, - depid int foreign key references department(depid) -); --- ``` --- --- C. 工资表(salary):雇员编号(empid),基本工资(basesalary),职务工资(titlesalary),扣除(deduction)。其中雇员编号为主键。 --- --- 3、给工资表(salary)的雇员编号(empid)增加外键约束,外键约束等级为(on update cascade 和on delete cascade) -create table salary( -empid int foreign key (empid) references employee(empid) on update cascade on delete cascade, -basesalary double(6,2) not null, -titlesalary double(6,2) not null, -deduction double(6,2) -); --- --- 4、添加数据如下: --- --- 部门表: --- --- | 部门编号 | 部门名称 | 部门简介 | --- | -------- | -------- | ------------ | --- | 111 | 生产部 | Null | --- | 222 | 销售部 | Null | --- | 333 | 人事部 | 人力资源管理 | - -insert into department values (111,'生产部',null),(222,'销售部',null),(333,'人事部','人力资源管理'); --- --- 雇员表: --- --- | 雇员编号 | 姓名 | 性别 | 职称 | 出生日期 | 所在部门编号 | --- | -------- | ---- | ---- | ---------- | ---------- | ------------ | --- | 1001 | 张三 | 男 | 高级工程师 | 1975-1-1 | 111 | --- | 1002 | 李四 | 女 | 助工 | 1985-1-1 | 111 | --- | 1003 | 王五 | 男 | 工程师 | 1978-11-11 | 222 | --- | 1004 | 张六 | 男 | 工程师 | 1999-1-1 | 222 | -insert into employee values (1001,'张三','男','高级工程师','1975-1-1',111),(1002,'李四','女','助工','1985-1-1',111),(1003,'王五','男','工程师','1978-11-11',222),(1004,'张六','男','工程师','1999-1-1',222); --- --- 工资表: --- --- | 雇员编号 | 基本工资 | 职务工资 | 扣除 | --- | -------- | -------- | -------- | ---- | --- | 1001 | 2200 | 1100 | 200 | --- | 1002 | 1200 | 200 | NULL | --- | 1003 | 2900 | 700 | 200 | --- | 1004 | 1950 | 700 | 150 | -insert into salary values (1001,2200,1100,200),(1002,1200,200,null),(1003,2900,700,200),(1004,1950,700,150); --- --- -``` - -### 作业4 - -``` mysql --- ## 第4题 --- --- 1、创建一个数据库:test04_school -create database test04_school charset utf8; --- --- 2、创建如下表格 -use test04_school; --- --- 表1 Department表的定义 -create table department( -depno int(10) not null primary key, -depname varchar(20) not null, -depnote varchar(50) -); --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | DepNo | 部门号 | int(10) | 是 | 否 | 是 | 是 | --- | DepName | 部门名称 | varchar(20) | 否 | 否 | 是 | 否 | --- | DepNote | 部门备注 | Varchar(50) | 否 | 否 | 否 | 否 | --- --- 表2 Teacher表的定义 -create table teacher( -number int not null primary key, -name varchar(30) not null, -sex varchar(4), -birth date, -depno int foreign key (depno) references department(depno), -salary float, -address varchar(100) -); --- --- | **字段名** | **字段描述** | **数据类型** | **主键** | **外键** | **非空** | **唯一** | --- | ---------- | ------------ | ------------ | -------- | -------- | -------- | -------- | --- | Number | 教工号 | int | 是 | 否 | 是 | 是 | --- | Name | 姓名 | varchar(30) | 否 | 否 | 是 | 否 | --- | Sex | 性别 | varchar(4) | 否 | 否 | 否 | 否 | --- | Birth | 出生日期 | date | 否 | 否 | 否 | 否 | --- | DepNo | 部门号 | int | 否 | 是 | 否 | 否 | --- | Salary | 工资 | float | 否 | 否 | 否 | 否 | --- | Address | 家庭住址 | varchar(100) | 否 | 否 | 否 | 否 | --- --- 3、添加记录 -insert into department values (601,'软件技术系','软件技术等专业'),(602,'网络技术系','多媒体技术等专业'),(603,'艺术设计系','广告艺术设计等专业'),(604,'管理工程系','连锁经营管理等专业'); --- --- | **DepNo** | **DepName** | **DepNote** | --- | --------- | ----------- | ------------------ | --- | 601 | 软件技术系 | 软件技术等专业 | --- | 602 | 网络技术系 | 多媒体技术等专业 | --- | 603 | 艺术设计系 | 广告艺术设计等专业 | --- | 604 | 管理工程系 | 连锁经营管理等专业 | - -insert into teacher values (2001,'Tom','女','1970-01-10',602,4500,'四川省绵阳市'),(2002,'Lucy','男','1983-12-18',601,2500,'北京市昌平区'),(2003,'Mike','男','1990-06-01',604,1500,'重庆市渝中区'),(2004,'James','女','1980-10-20',602,3500,'四川省成都市'),(2005,'Jack','男','1975-05-30',603,1200,'重庆市南岸区'); --- --- | **Number** | **Name** | **Sex** | **Birth** | **DepNo** | **Salary** | **Address** | --- | ---------- | -------- | ------- | ---------- | --------- | ---------- | ------------ | --- | 2001 | Tom | 女 | 1970-01-10 | 602 | 4500 | 四川省绵阳市 | --- | 2002 | Lucy | 男 | 1983-12-18 | 601 | 2500 | 北京市昌平区 | --- | 2003 | Mike | 男 | 1990-06-01 | 604 | 1500 | 重庆市渝中区 | --- | 2004 | James | 女 | 1980-10-20 | 602 | 3500 | 四川省成都市 | --- | 2005 | Jack | 男 | 1975-05-30 | 603 | 1200 | 重庆市南岸区 | --- --- 4、用SELECT语句查询Teacher表的所有记录。 -select * from teacher; -``` - - - diff --git "a/57 \351\273\204\346\265\201\346\266\233/20230221 \347\272\246\346\235\237\347\254\224\350\256\260.md" "b/57 \351\273\204\346\265\201\346\266\233/20230221 \347\272\246\346\235\237\347\254\224\350\256\260.md" deleted file mode 100644 index 92df07b29f9a388a95ff396de7b5f6ee206d8319..0000000000000000000000000000000000000000 --- "a/57 \351\273\204\346\265\201\346\266\233/20230221 \347\272\246\346\235\237\347\254\224\350\256\260.md" +++ /dev/null @@ -1,49 +0,0 @@ -# 约束 - -(数据类型就是一种对数据的约束) - -#### 1.非空约束 - - not null (表示这个字段必须填写) - -#### 2.默认约束 - -default (当你不给值时,系统自动以默认值增充) #非空+默认值约束 - -#### 3.主键约束 - -primary key (非空,唯一 就是值不能重复,同一个表中只能有一个主键) - -#### 4.唯一约束 - -unique key (值不能重复,可以为空,一个表中可以有多个字段可设唯一) - -#### 5.自增约束 - -auto_increment #前提是主键 - -(不给值,给0或者给null值,会自动在原来最大数基础上+1,给了值,就以给的值为准。) - -#### 6.外键约束 - -foreign key (约束两个表的关系,或者是一个表的两个字段之间的关系) - -格式: foreign key (从表的字段) references 主表(被依赖字段); - - 1.主表(父表)和从表(子表) # 主表:被依赖,被参考。 从表:依赖别人的,参考别人的。 - - 2.外键的建立和指定要在从表中定义 - - ##### 要求 - -A.主表必须先存在。 - -B.主表被依赖字段必须有索引,所以通常是主键列或唯一键列才能作为被依赖字段。 - -C.删除表时,要么先删除从表,在删除主表。要么先解除外键约束,才能删除。 - -D.从表的依赖字段的数据,必须在主表被依赖字段中选择,添加与修改都是这样。 - -E.主表被依赖字段的数据不能轻易的删除和修改,要看是否被引用。 - -#外键的约束等级为 on update/delete cascade/(set null) \ No newline at end of file diff --git "a/57 \351\273\204\346\265\201\346\266\233/20230223 DQL\344\270\216\350\277\220\347\256\227\347\254\246.md" "b/57 \351\273\204\346\265\201\346\266\233/20230223 DQL\344\270\216\350\277\220\347\256\227\347\254\246.md" deleted file mode 100644 index 6d8d963f5a8ad14eeee4bc65076bdc9e5a656477..0000000000000000000000000000000000000000 --- "a/57 \351\273\204\346\265\201\346\266\233/20230223 DQL\344\270\216\350\277\220\347\256\227\347\254\246.md" +++ /dev/null @@ -1,290 +0,0 @@ -# 笔记 - -## DQL - -select语句的基本语法: select 常量; select 表达式; select 函数; - -例:select 1; select 9/2; select NOW(); - -1.从数据中筛选数据的格式: select 字段列表 from 表名称;【where 条件;】 - -2.使用别名: - - 格式:select 字段名 【as】别名 from 表名称 【as】 别名; - - --列的别名有空格时,加双引号。没有时,可加可不加。 - - --表的别名不能加双引号,表的别名中不加空格。 - -3.结果去重: distinct - - 格式: select distinct 字段列表 from 表名称 【where 条件】; - - --distinct只能发在第一个字段前面 --它只支持一个字段。 - -## 运算符 - -1.算数运算符: - -加 + ,减 - , 乘 * ,除 / 或div , (div只保留整数部分) , 模(余) % ,mod - -2.比较运算符: - -大于 > ,小于 < , 大于等于 >= , 小于等于 <= , 等于 = , 不等于 != 。 (等于与不等于不能用于null计算) - -3.区间运算符: - - 区间范围: between x and y not between x and y - - 集合范围: in(x,y,z) not in (x,y,z) # between....and ......(结果包含两边边界) - -4.模糊比较运算符: - - %:代表任意个字符 _:代表一个字符,几个下划线就代表几个字符。 - - 格式:select * from 表名 where 字段名 ' '; - - #查询当前mysql数据库在字符集情况:show variables like ‘%character%’ - -5.逻辑运算符: - - 与: && 或 and - - 或: || 或or - - 非: !或者not - - 异或:xor - -6.关于null值的问题: - -​ 1.判断时: xx is null xx is not null xx<=>null - -​ 2.计算时: if null (xx,代替值) 当xx是null时,用替代值算。 - - - -# 课堂作业 - -## 作业1 - -``` mysql -drop table if exists user_profile; -create database zy charset utf8; -use zy; -CREATE TABLE `user_profile` ( -`id` int, -`device_id` int, -`gender` varchar(14), -`age` int , -`university` varchar(32), -`province` varchar(32) -); -INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing'); -INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai'); -INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing'); -INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang'); -INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong'); --- (1)题目:从用户信息表中取出学校的去重数据 -SELECT university FROM user_profile; -select distinct `university` from user_profile; --- (2)题目:查看用户明细设备ID数据,并将列名显示为 'user_infos_example' -select device_id as user_infos_example from user_profile; --- (3)题目:查询university是北京大学的设备ID -select device_id,university from user_profile where university = '北京大学'; --- (4)题目:查询年龄大于24用户的设备ID、性别、年龄、学校 -select device_id,gender,age,university from user_profile where age >24; --- (5)题目:查询所有用户的设备id、性别、年龄、学校 -select device_id,gender,age,university from user_profile; --- (6)题目:查询所有用户的数据 -select * from user_profile; --- (7)题目:查询省份是"shanghai"的用户信息 -select * from user_profile where province = 'Shanghai'; --- (8)题目:查询所有男性用户的设备ID、年龄、学校 -select device_id,age,university from user_profile where gender = 'male'; --- (9)题目:从用户信息表中取出省份的去重数据 -SELECT province FROM user_profile; -select distinct province from user_profile; -``` - -## 作业2 - - #### 作业1 - -``` MYSQL -drop table if exists user_profile; -create database zy2 charset utf8; -use zy2; -CREATE TABLE `user_profile` ( -`id` int, -`device_id` int, -`gender` varchar(14), -`age` int , -`university` varchar(32), -`province` varchar(32)); - -INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing'); -INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai'); -INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing'); -INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang'); -INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong'); - --- (1)题目:查询年龄20岁及以上且23岁及以下用户的设备ID、性别、年龄 -select device_id,gender,age from user_profile where age>=20 and age<=23; --- (2)题目:查询除复旦大学以外的所有用户的设备ID、性别、年龄、大学 -select device_id,gender,age,university from user_profile where university != '复旦大学'; --- (3)题目:查询年龄不为空的用户的设备ID,性别,年龄,学校的信息 -select device_id,gender,age,university from user_profile where age is not null; -``` - -#### 作业2 - -``` mysql -drop table if exists user_profile; -create database zy3 charset utf8; -use zy3; -CREATE TABLE `user_profile` ( -`id` int , -`device_id` int, -`gender` varchar(14), -`age` int , -`university` varchar(32), -`gpa` float, -`active_days_within_30` float, -`question_cnt` float, -`answer_cnt` float -); - -INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4,7,2,12); -INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学',4.0,15,5,25); -INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学',3.2,12,3,30); -INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学',3.6,5,1,2); -INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8,20,15,70); -INSERT INTO user_profile VALUES(6,2131,'male',28,'北京师范大学',3.3,15,7,13); --- (4)题目:查询男性且GPA在3.5以上(不包括3.5)的用户的设备ID,性别、年龄、学校、gpa -select device_id,gender,age,university,gpa from user_profile where gpa>=3.5 and age is not null; --- (5)题目:查询学校为北大或GPA在3.7以上(不包括3.7)的用户的设备ID,性别、年龄、学校、gpa -select device_id,gender,age,university,gpa from user_profile where university ='北京大学' or gpa>3.7; --- (6)题目:查询学校为北大、复旦和山大用户的设备ID,性别、年龄、学校、gpa -select device_id,gender,age,university,gpa from user_profile where university ='北京大学' or university ='复旦大学' or university ='山东大学'; --- (7)题目:查询gpa在3.5以上(不包括3.5)的山东大学用户 或 gpa在3.8以上(不包括3.8)的复旦大学同学 -select device_id,gender,age,university,gpa from user_profile where gpa>3.5 and university ='山东大学' or gpa>3.8 and university ='复旦大学'; --- (8)题目:所有大学中带有北京的用户信息 -select device_id,age,university from user_profile where university like '%北京%'; -``` - - - - - -# 课后作业 - - ### 作业1 - -``` mysql --- ## 第1题:员工表 -create database zy1 charset utf8; -use zy1; - -drop table if exists `employee`; -#创建employee表 -CREATE TABLE employee( - id INT, - `name` VARCHAR(20), - sex VARCHAR(20), - tel VARCHAR(20), - addr VARCHAR(50), - salary FLOAT -); - -#添加信息 -INSERT INTO employee(id,`name`,sex,tel,addr,salary)VALUES -(10001,'张一一','男','13456789000','广东韶关',10010.58), -(10002,'刘小红','女','13454319000','广东江门',12010.21), -(10003,'李四','男','0751-1234567','广东佛山',10040.11), -(10004,'刘小强','男','0755-5555555','广东深圳',15010.23), -(10005,'王艳','男',NULL,'广东广州',14050.16); --- -select * from employee; --- --- **要求1:**查询出薪资在12000~13000之间的员工信息。 -select * from employee where salary between 12000 AND 13000; --- --- **要求2:**查询出姓“刘”的员工的工号,姓名,家庭住址。 -select id,`name`,addr from employee where `name` like '%刘%'; --- --- **要求3:**将“李四”的家庭住址改为“广东韶关” -update employee set addr = '广东韶关' where name ='李四'; --- --- **要求4:**查询出名字中带“小”的员工 -select * from employee where `name` like '%小%'; --- --- **要求5:**查询出薪资高于11000的男员工信息 -select * from employee where sex = '男' and salary >11000; --- --- **要求6:**查询没有登记电话号码的员工 -select * from employee where tel is null; --- --- **要求7:**查询薪资高于12000或者家是广东深圳、广州的男员工 -select * from employee where sex = '男' and (salary >12000 or (addr = '广东深圳' and addr = '广东广州')); --- --- **要求8:**查询每个员工的年薪,显示“姓名、年薪” -select `name`,salary from employee; -``` - -#### 作业2 - -``` mysql --- ## 第2题:国家信息表 --- --- countries_info表中存储了国家名称、所属大陆、面积、人口和 GDP 值。 --- -create database zy2 charset utf8; -use zy2; - DROP TABLE IF EXISTS `countries_info`; -CREATE TABLE `countries_info`( - `name` VARCHAR(100), - `continent` VARCHAR(100), - `area` INT, - population INT, - gdp BIGINT -); - -INSERT INTO countries_info VALUES -('Afghanistan','Asia',652230,25500100,20343000000), -('Albania','Europe',28748,2831741,12960000000), -('Algeria','Africa',2381741,37100000,188681000000), -('Andorra','Europe',468,78115,3712000000), -('Angola','Africa',1246700,20609294,100990000000); --- --- **要求1:** 查询大国 的国家名称、人口和面积。 -select `name`,population,`area` FROM `countries_info` where `area` >= 3000000 and population >= 25000000; --- --- 如果一个国家满足下述两个条件之一,则认为该国是 大国 : --- --- - 面积至少为 300万平方公里(即,3000000 km2) --- --- - 人口至少为 2500 万(即 25000000) --- --- **要求2:**查询属于亚洲的国家名称、所属大陆、面积、人口和 GDP 值 -select * from `countries_info` where `continent` = 'Asia'; --- --- **要求3:**查询国土面积不足1万平方公里且人口不走10万人的国家信息 -select * from `countries_info` where `area`<10000 and population < 100000; --- --- **要求4:**查询国家名字中包含“o“字母的国家信息 -select * from `countries_info` where `name` like '%o%'; --- --- **要求5:**查询GDP值超过10000000000的国家信息 -select * from `countries_info` where gdp >= 10000000000; --- --- **要求6:**查询每个国家的人均贡献GDP值(GDP/人口总数)并显示为“国家名、人口、GDP值、人均贡献GDP值” -select `name`,population,gdp,gdp/population '人均gdp' from `countries_info`; --- --- **要求7:**查询人均贡献GDP值低于1000的国家信息。 -select * from `countries_info` where gdp/population < 1000; --- --- **要求8:**查询每个国家的人均国土面积(面积/人口总数)并显示为“国家名、面积、人口、人均国土面积值” -select `name`,`area`,population,`area`/population '人均国土面积' from `countries_info`; -``` - diff --git "a/57 \351\273\204\346\265\201\346\266\233/20230301 \345\207\275\346\225\260\344\270\216\345\205\263\350\201\224\346\237\245\350\257\242.md" "b/57 \351\273\204\346\265\201\346\266\233/20230301 \345\207\275\346\225\260\344\270\216\345\205\263\350\201\224\346\237\245\350\257\242.md" deleted file mode 100644 index ed42fda7604dd765bd2f2350f71c70f7f56eec89..0000000000000000000000000000000000000000 --- "a/57 \351\273\204\346\265\201\346\266\233/20230301 \345\207\275\346\225\260\344\270\216\345\205\263\350\201\224\346\237\245\350\257\242.md" +++ /dev/null @@ -1,179 +0,0 @@ -# 笔记 - -## 函数 - - 1.mysql中函数分为两大类。 - - (1)系统预定义的函数,可以直接调用。 - - (2)用户自定义的函数,需要自己声明,然后才能使用。 - -2.系统预定义的函数,又可分为两大类。 - - (1)单行函数 #所谓单行函数是指一行记录通过单行函数计算完结果还是一行 - - (2)多行函数(聚合函数,分组函数) - -​ #所谓多行函数是指一行或者多行记录通过单行函数计算完,结果的记录数会减少。 - -##### 常用聚合函数类型 - -AUG(x):求平均值 - -SUM(x) :求总和 - -MAX (x):求最大值 - -MIN (x):求最小值 - -COUNT (x):统计记录数 - -## 关联查询 (两个或更多个表一起查询) - -​ #前提条件:这些一起查询的表之间是有关系的(一对一或一对多)之间一定有关联字段,关联字段可能建立了外键,也可能没有建立外键。 - - ##### 1.内连接 - - inner join .....on - - 结果:a∩b a表 inner join b表 - -##### 2.左连接 - - A left join B on - - (1)结果:a表全部 - -​ a表 left join b表 - - (2)结果:a表 - a∩b - -​ a表 left join b表 where a表.关联字段 is null - -##### 3.右连接 - - A right join B on - -​ (1)结果:b表全部 - -​ a表 right join b表 - -​ (2)结果:b表 - a∩b - -​ a表 right join b表 where a表.关联字段 is null - -##### 4.全外连接 - -​ 用 union 合并 - -(1) a表∪b表 a表结果 union b表结果 - -​ #查询a结果的sql union 查询b结果的sql - -(2)a∪b - a∩b a表 - a∩b结果 union b表 - a∩b结果 - -​ #查询a - a∩b的sql union 查询b - a∩b的sql - -##### 5.特殊的内连接: - -标准写法:a inner join b on 条件 - -特殊写法:from a,b where 条件 - - - -# 作业 - - - -``` sql --- 1. 创建数据库与表格 - -create database zy charset utf8; -use zy; -create table student( -sno varchar(20) primary key, -sname varchar(20) not null, -ssex varchar(20) not null, -sbirthday datetime, -class varchar(20) -); -create table teacher( -tno varchar(20) primary key, -tname varchar(20) not null, -tsex varchar(20) not null, -tbirthday datetime, -prof varchar(20), -depart varchar(20) not null -); -create table course( -cno varchar(20) primary key, -cname varchar(20) not null, -tno varchar(20), foreign key (tno) references teacher (tno) -); -create table score( -sno varchar(20), foreign key (sno) references student(sno), -cno varchar(20), foreign key (cno) references course(cno), -degree decimal(4,1) -); - --- 2.插入数据 --- 学生表 -insert into student values ('108','曾华','男','1977-9-1','95033'),('105','匡明','男','1975-10-2','95031'),('107','王丽','女','1976-1-23','95033'),('101','李军','男','1976-2-20','95033'),('109','王芳','女','1975-2-10','95031'),('103','陆君','男','1974-6-3','95031'); --- 教师表 -insert into teacher values ('804','李诚','男','1958-12-2','副教授','计算机系'),('856','张旭','男','1969-3-12','讲师','电子工程系'),('825','王萍','女','1972-5-5','助教','计算机系'),('831','刘冰','女','1977-8-14','助教','电子工程系'); --- 课程表 -insert into course values ('3-105','计算机导论','825'),('3-245','操作系统','804'),('6-166','数字电路','856'),('9-888','高等数学','831'); --- 成绩表 -insert into score values ('103','3-245',86),('105','3-245',75),('109','3-245',68),('103','3-105',92),('105','3-105',88),('109','3-105',76),('101','3-105',64),('107','3-105',91),('108','3-105',78),('101','6-166',85),('107','6-166',79),('108','6-166',81); - --- 3. 数据库中的数据: - - --- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ -select * from (student a left join score b on a.sno = b.sno) right join course c on b.cno = c.cno; --- 2,查询没有学生的教师的所有信息 - --- 4. 查询 - - --- 1 查询Score表中的最高分的学生学号和课程号。 -select sno,cno,max(degree) from score; --- 2 查询所有学生的Sname、Cno和Degree列。 -select student.sname,score.cno,score.degree from -score inner join student on student.sno=score.sno; --- 3 查询所有学生的Sno、Cname和Degree列。 -select student.sno,course.cno,score.degree from student inner join score inner join course on student.sno=score.sno and score.cno=course.cno; --- 4 查询所有学生的Sname、Cname和Degree列。 -select student.sname,course.cname,score.degree from student inner join score inner join course on student.sno=score.sno and score.cno=course.cno; --- 5 查询“95033”班学生的平均分。 -select AVG(score.degree) from score inner join student on score.sno=student.sno where student.class = '95033'; --- 6 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 -select student.sname,course.cname,score.sno,score.cno,score.degree from --- 7 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 --- 8 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 --- 9 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 --- 10 查询“张旭“教师任课的学生成绩。 --- 11 查询选修某课程的同学人数多于5人的教师姓名。 --- 12 查询出“计算机系“教师所教课程的成绩表。 --- 13 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 --- 14 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 --- 15 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. --- 16 查询成绩比该课程平均成绩低的同学的成绩表。 --- 17 查询所有任课教师的Tname和Depart. -select tname,depart from teacher; --- 18 查询所有未讲课的教师的Tname和Depart. - --- 19 查询“男”教师及其所上的课程。 -select teacher.tname,course.cname from teacher inner join course on teacher.tno=course.tno where teacher.tsex = '男'; --- 20 查询最高分同学的Sno、Cno和Degree列。 -select sno,cno,degree MAX(degree) from score; --- 21 查询和“李军”同性别的所有同学的Sname. -select sname from student where ssex = '男'; --- 22 查询和“李军”同性别并同班的同学Sname. -select sname from student where ssex = '男' and class = '95033'; --- 23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 -select student.sname,score.degree from student inner join score inner join course on student.sno=score.sno and score.cno=course.conon where student.ssex = '男' and course.cname = '计算机导论'; --- -``` - diff --git "a/57 \351\273\204\346\265\201\346\266\233/20230307 \345\255\220\346\237\245\350\257\242.md" "b/57 \351\273\204\346\265\201\346\266\233/20230307 \345\255\220\346\237\245\350\257\242.md" deleted file mode 100644 index df4dd3e035f3e37f3dfbb9fb3a4442fde1e7b36e..0000000000000000000000000000000000000000 --- "a/57 \351\273\204\346\265\201\346\266\233/20230307 \345\255\220\346\237\245\350\257\242.md" +++ /dev/null @@ -1,134 +0,0 @@ -# 笔记 - -##### 子查询 - -- 嵌套在其他SQL语句中的查询语句。 -- 子查询通常先运行,所以要用()包裹起来。 -- 子查询的运行结果,可以作为其他语句的条件,数据源等。 - -##### 子查询分三种形式 - -​ select 1 from 2 where 3 - - 1.放在select后面 - - 2.放在where/having后面 - - 3.放在from后面,子查询当做一个临时的表使用,必须要给别名。 - - - -##### where或having后的子查询,其子查询的结果有三种形式 - - 1.单列单个值,可以直接使用比较运算符 - - 2.单列多个值,可以使用 in ,not in 进行比较 - - 3.单列多个值,可以使用比较运算符,搭配any,all,等关键字与查询结果进行比较 - - - -##### 子查询结果是单列,可以放在select参与运算,或者是作为字段,也可以放在where / having后当条件。 - -##### 子查询结果是多列,多个值,只能放在from后面当临时表使用,并且必须取别名。 - -# 作业 - -``` mysql --- 创建数据库 - -create database 57t charset utf8; - --- 使用数据库 - -use 57t; - --- 创建表格 - -create table stuinfo( -stuno varchar(10) primary key, -stuname varchar(10), -stusex char, -stuage int, -stuaddress varchar(10), -stuseat int -); -create table stuexam( -examno int primary key, -stuno varchar(10), -writtenexam int, -labexam int, -foreign key (stuno) references stuinfo(stuno) -); -create table stumarks( -examno int, -stuid varchar(10), -score int, -foreign key (examno) references stuexam(examno), -foreign key (stuid) references stuinfo(stuno) -); - --- 插入数据 - -insert into stuinfo values ('s2501','张秋利','男',20,'美国硅谷',1),('s2502','李斯文','女',18,'湖北武汉',2),('s2503','马文才','男',18,'湖南长沙',3),('s2504','欧阳俊雄','女',21,'湖北武汉',4),('s2505','梅超风','男',16,'湖北武汉',5),('s2506','陈旋风','男',19,'美国硅谷',6); -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); -insert into stumarks values (1,'s2501',88),(2,'s2501',92),(3,'s2501',53),(4,'s2502',60),(5,'s2502',99),(6,'s2503',82); - --- 在如图的数据表上完成以下题目 --- --- 1.查询出年龄比班上平均年龄大的学生的信息 -select * from stuinfo where stuage > (select avg(stuage) from stuinfo); - --- --- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) - -select a.stuno,a.stuname,a.stusex,c.`选修课最高分` from stuinfo a right join stumarks b on a.stuno = b.stuid right join (select examno,max(score) 选修课最高分 from stumarks group by stuid) c on b.examno = c.examno; - --- -- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) -select a.stuno,stuname,stusex,((b.writtenexam+labexam)/2) 考试平均分 from stuinfo a left join stuexam b on a.stuno = b.stuno; - --- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) --- (1) -select * from stuinfo where stusex = '男' and stuage >=20; --- (2) -select * from stuinfo where stuage = (select stuage from stuinfo where stuage >= 20 and stusex = '男'); - - --- 5.查询出年龄比所有男生年龄都大的女生的信息 -select * from stuinfo where stusex = '女' and stuage = (select max(stuage) from stuinfo); - --- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) -select distinct a.stuno,a.stuname,a.stusex,a.stuage,a.stuaddress,a.stuseat from stuinfo a right join stumarks b on a.stuno = b.stuid where b.score >= 60 ; - --- --- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select distinct * from stuinfo a left join stumarks b on a.stuno = b.stuid where b.score is not null; --- --- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) -select distinct * from stuinfo a left join stumarks b on a.stuno = b.stuid where b.score is null; --- --- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) -select a.stuno,a.stuname,a.stusex,a.stuage,a.stuaddress,a.stuseat from stuinfo a left join stuexam b on a.stuno = b.stuno where b.writtenexam >= 90 or b.labexam >=90; - --- --- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) -select a.stuno,a.stuname,a.stusex,a.stuage,a.stuaddress,a.stuseat,((b.writtenexam + b.labexam)/2) 平均成绩 from stuinfo a left join stuexam b on a.stuno = b.stuno where ((b.writtenexam + b.labexam)/2) > 80; - --- --- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) -select a.stuno,a.stuname,a.stusex,a.stuage,a.stuaddress,a.stuseat from stuinfo a left join stuexam b on a.stuno = b.stuno where b.writtenexam > (select writtenexam from stuexam where stuno = 's2501') and b.labexam > (select labexam from stuexam where stuno = 's2501'); --- --- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) -select a.stuno,a.stuname,a.stusex,a.stuage,a.stuaddress,a.stuseat from stuinfo a left join stuexam b on a.stuno = b.stuno where b.writtenexam > (select writtenexam from stuexam where stuno = 's2501') or b.labexam > (select labexam from stuexam where stuno = 's2501'); - --- --- 13.查询班上比所有男生年龄都要大的女生的信息 -select * from stuinfo where stusex = '女' and stuage = (select max(stuage) from stuinfo); --- --- 14.查询出只要比某个男生年龄大的女生的信息 -select * from stuinfo where stusex = '女' and stuage > (select min(stuage) from stuinfo where stusex = '男'); - -``` - - -