From a66deb3e681217f1ab1f229dda0d617a21d3dba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91=E5=BC=98=E6=99=96?= <351131303@qq.com> Date: Fri, 24 Feb 2023 20:23:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E8=A1=A8=E6=9F=A5=E8=AF=A2=E7=AC=94?= =?UTF-8?q?=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20230213 \347\231\273\345\275\225.md" | 6 + ...52\346\210\221\344\273\213\347\273\215.md" | 28 ++ .../20230216 DDL,DML.md" | 357 ++++++++++++++++++ ...46\346\235\237\344\275\234\344\270\232.md" | 0 ...45\350\257\242\344\275\234\344\270\232.md" | 0 ...45\350\257\242\347\254\224\350\256\260.md" | 86 +++++ 6 files changed, 477 insertions(+) create mode 100644 "20 \351\203\221\345\274\230\346\231\226/20230213 \347\231\273\345\275\225.md" create mode 100644 "20 \351\203\221\345\274\230\346\231\226/20230215 \350\207\252\346\210\221\344\273\213\347\273\215.md" create mode 100644 "20 \351\203\221\345\274\230\346\231\226/20230216 DDL,DML.md" rename "20 \351\203\221\345\274\230\346\231\226/20230222\347\272\246\346\235\237\344\275\234\344\270\232.md" => "20 \351\203\221\345\274\230\346\231\226/20230220 \347\272\246\346\235\237\344\275\234\344\270\232.md" (100%) rename "20 \351\203\221\345\274\230\346\231\226/20230222\346\237\245\350\257\242\344\275\234\344\270\232.md" => "20 \351\203\221\345\274\230\346\231\226/20230222 \346\237\245\350\257\242\344\275\234\344\270\232.md" (100%) create mode 100644 "20 \351\203\221\345\274\230\346\231\226/20230223 \345\244\232\350\241\250\345\205\263\350\201\224\346\237\245\350\257\242\347\254\224\350\256\260.md" diff --git "a/20 \351\203\221\345\274\230\346\231\226/20230213 \347\231\273\345\275\225.md" "b/20 \351\203\221\345\274\230\346\231\226/20230213 \347\231\273\345\275\225.md" new file mode 100644 index 0000000..e1d8497 --- /dev/null +++ "b/20 \351\203\221\345\274\230\346\231\226/20230213 \347\231\273\345\275\225.md" @@ -0,0 +1,6 @@ +![无标题](C:\Users\Administrator\Desktop\无标题.png) + +```sql +mysql -u 用户名 -p 密码; +``` + diff --git "a/20 \351\203\221\345\274\230\346\231\226/20230215 \350\207\252\346\210\221\344\273\213\347\273\215.md" "b/20 \351\203\221\345\274\230\346\231\226/20230215 \350\207\252\346\210\221\344\273\213\347\273\215.md" new file mode 100644 index 0000000..11cb003 --- /dev/null +++ "b/20 \351\203\221\345\274\230\346\231\226/20230215 \350\207\252\346\210\221\344\273\213\347\273\215.md" @@ -0,0 +1,28 @@ +```sql +create database class4 character utf8; + +use class4; + +CREATE TABLE `student` ( + + `学号` char(10) , + + `姓名` varchar(4) , + + `性别` char(1) , + + `爱好` text, + + `地址` varchar(20) , + + `联系方式` char(11) , + + `邮箱` varchar(20) , + + `QQ号` char(10) + +) ; + +INSERT INTO `student` VALUES ('2244310120','郑弘晖','男','RAP','福建福州','18888888888','351131303@qq.com','351131303'); +``` + diff --git "a/20 \351\203\221\345\274\230\346\231\226/20230216 DDL,DML.md" "b/20 \351\203\221\345\274\230\346\231\226/20230216 DDL,DML.md" new file mode 100644 index 0000000..e9840dc --- /dev/null +++ "b/20 \351\203\221\345\274\230\346\231\226/20230216 DDL,DML.md" @@ -0,0 +1,357 @@ +# 笔记 + +1. 数据库 :DataBase +2. 数据库管理系统:DBMS +3. 表格 : table +4. 关系型数据库管理系统: MySQL + +## DDL 数据定义语言 + +1. 创建 :create +2. 删除 :DROP +3. 修改: ALTER +4. 查询表结构: DESC +5. 展示:show + +## DML 数据操作语言 + +1. 增加:insert +2. 修改:update +3. 删除:delete + +## DQL 数据查询语言 + +1. select + +## DCL 数据控制语言 + +1. 授权: grant +2. 确认: commit +3. 回滚: rollback + +## 数据类型 + +1. 整数:int + + 1. ```sql + create table t_int( + i1 int, + i2 int(2) #没有unsigned zerofill,(2)没有意义 + ); + ``` + +2. 字符串(固定长度):char + +3. 字符串(不固定长度):varchar + +4. 单浮点型:float + +5. 双浮点型:double + +6. 定点数: decimal + +7. 时间类型 + + 1. date + 2. datetime + 3. time + 4. year + 5. timrstamp + +## DDL的操作 + +```sql +show databases charset utf8; #查询自己所有数据库 +create database 数据库名; #创造一个数据库 +use 数据库名; #进入数据库 +drop database 数据库名; #删除数据库 +show create database 数据库名; #查询数据库详细信息 +alter database 数据库名 character set 新的字符集名称 ; #修改数据库的编码 +desc 表名称; #查询表结构 +ALTER TABLE 表名称 ADD 字段名 数据类型; #增加一个字段 +ALTER TABLE 表名称 CHANGE 旧字段名称 新的字段名称 数据类型; #修改一个字段名称 +ALTER TABLE 表名称 MODIFY 字段名称 数据类型 AFTER\FIRST 另一个字段; #修改字段的位置 +#当输入“FIRST”时不用加另一个字段 +ALTER TABLE 表名称 RENAME TO 新名称; #重命名表 +``` + +## DML的操作 + +```sql +alter table 字段名 rename to 新字段名; #修改字段名 +UPDATE 表名称 SET 字段名 = 值 where 条件; #修改里面已经有的数据 +DELETE FROM 表名称; #删除整个表的数据 +UPDATE stu SET name=NULL; #删除weight列的数据 +ALTER TABLE stu DROP name; #删除weight列的定义 +``` + + + +# 2.作业 + + +```sql + + +*| 字段名 | 数据类型 | +*| --- | --- | +*| c_num | int(11) | +*| c_name | varchar(50) | +*| c_contact | varchar(50) | +*| c_city | varchar(50) | +*| c_birth | date | + +*1、创建数据库test01_market + +c_citycreate database test01_market charset utf8; +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 +); + +2、创建表格customers + +**要求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 column 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:**删除字段 + +alter table customers_info drop column c_city; + +*1、创建数据库test02_library + +CREATE DATABASE test02_library; +alter database test02_library charset utf8; +show CREATE DATABASE test02_library; +use test02_library; + +*2、创建表格books + +show CREATE TABLE books; +alter table books charset=utf8; + +| *-- | 字段名 | 字段说明 | 数据类型 | 允许为空 | 唯一 | +| --- | ------- | ---- | ------------ | ---- | --- | +| -- | b_id | 书编号 | int(11) | 否 | 是 | +| -- | b_name | 书名 | varchar(50) | 否 | 否 | +| -- | authors | 作者 | varchar(100) | 否 | 否 | +| -- | price | 价格 | float | 否 | 否 | +| -- | pubdate | 出版日期 | year | 否 | 否 | +| -- | note | 说明 | varchar(100) | 是 | 否 | +| -- | num | 库存 | int(11) | 否 | 否 | + +CREATE TABLE books( +b_id int(1)ZEROFILL not null comment 书编号 , +b_name varchar(50) not null comment 书名, +authors1 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 库存 +); +ALTER TABLE books MODIFY b_id int(1)not null auto_increment; + +-- 3、向books表中插入记录 + +-- 1) 指定所有字段名称插入第一条记录 + +INSERT into books(b_id,b_name,authors1,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'); +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'); +SELECT + +*from books; +-- 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; + +-- 1、创建数据库test03_bookstore + +CREATE database test03_bookstore CHARACTER set utf8; +use test03_bookstore; +drop DATABASE 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 | | +-- +----------+--------------+------+-----+---------+----------------+ +CREATE TABLE book( +id int auto_increment not null PRIMARY key, +title varchar(100) not null , +author varchar(100) not null , +price DOUBLE(11,2) not null , +sales int not null , +stock int 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 | +-- +----+---------------+------------+-------+-------+-------+----------------------------+ +-- ``` +insert into book VALUES(1,'解忧杂货店 ','东野圭吾',27.20,102,98,' upload/books/解忧杂货店.jpg'); +insert into book VALUES(2,' 边城','沈从文',23.00,102,98,'upload/books/边城.jpg'); +SELECT *from book; +-- 3、创建用户表users,并插入数据 +CREATE table users( +id int auto_increment not null PRIMARY key, +username varchar(100) not null UNIQUE KEY, +`password` VARCHAR(100) not null, +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 +insert into users VALUES(1,'admin','112233','admin@mxdx.com') +SELECT *from users; +show CREATE TABLE users; + +-- +----+----------+----------------------------------+--------------------+ +-- | 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 | | +-- +--------------+--------------+------+-----+---------+-------+ +-- ``` +CREATE table orders( +id varchar(100) not null PRIMARY key, +order_time DATETIME not null, +total_count int not null, +total_amount DOUBLE(11,2) not null, +state int not null, +user_id int +); +desc orders; +alter table orders add index(user_id); +-- 尝试添加部分模拟数据,参考示例如下: +insert into orders VALUES('15294258455691','2018-06-20 00:30:45',2,52.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 + +-- ```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 not null auto_increment PRIMARY KEY, +count int 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 | +-- +----+-------+--------+------------+----------+-------+------------+----------------+ +-- +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'); + +``` + diff --git "a/20 \351\203\221\345\274\230\346\231\226/20230222\347\272\246\346\235\237\344\275\234\344\270\232.md" "b/20 \351\203\221\345\274\230\346\231\226/20230220 \347\272\246\346\235\237\344\275\234\344\270\232.md" similarity index 100% rename from "20 \351\203\221\345\274\230\346\231\226/20230222\347\272\246\346\235\237\344\275\234\344\270\232.md" rename to "20 \351\203\221\345\274\230\346\231\226/20230220 \347\272\246\346\235\237\344\275\234\344\270\232.md" diff --git "a/20 \351\203\221\345\274\230\346\231\226/20230222\346\237\245\350\257\242\344\275\234\344\270\232.md" "b/20 \351\203\221\345\274\230\346\231\226/20230222 \346\237\245\350\257\242\344\275\234\344\270\232.md" similarity index 100% rename from "20 \351\203\221\345\274\230\346\231\226/20230222\346\237\245\350\257\242\344\275\234\344\270\232.md" rename to "20 \351\203\221\345\274\230\346\231\226/20230222 \346\237\245\350\257\242\344\275\234\344\270\232.md" diff --git "a/20 \351\203\221\345\274\230\346\231\226/20230223 \345\244\232\350\241\250\345\205\263\350\201\224\346\237\245\350\257\242\347\254\224\350\256\260.md" "b/20 \351\203\221\345\274\230\346\231\226/20230223 \345\244\232\350\241\250\345\205\263\350\201\224\346\237\245\350\257\242\347\254\224\350\256\260.md" new file mode 100644 index 0000000..4a8c342 --- /dev/null +++ "b/20 \351\203\221\345\274\230\346\231\226/20230223 \345\244\232\350\241\250\345\205\263\350\201\224\346\237\245\350\257\242\347\254\224\350\256\260.md" @@ -0,0 +1,86 @@ +# 第六章.多表关联查询 + +## 6.1关联数据的操作 + +(1)操作的表需要两张或两张以上才能连接。 + +(2)连接操作是关系数据操作中专门用于数据库操作的关系运算。 + +## 6.1.1.并(UNION) + +“并”是一种关联数据操作,也称为并操作。“并”具有将两份拥有相同字段数目和字段类型的表合并到一起。 + +## 6.1.2.笛卡儿积(基本不用) + +指的是两个集合的乘积(例如A={1,2},B={1,3},A*B)。 + +(1)两个集合相乘,不满足交换率。(A*B != B*A) + +(2)指的是两个集合中的元素个数相乘。 + +## 6.1.3连接(JOIN) + +指的是在笛卡儿积的数据记录中,按照相应字段的比较条件进行选择生成一个新的关系。同时连接分为三种:内连接(INNER JOIN)、外连接(OUTER JOIN)、交叉连接(CROSS JOIN)。 + +## 6.2交叉连接(CROSS JOIN) + +1.一般用来返回连接表的笛卡儿积。 + +```sql +语法1:select <字段名> from <表名1> cross join <表名2> [where]; +语法2:select <字段名> from <表名1>,<表名2> [where]; +``` + +## 6.3内连接(INNER JOIN) + +1.利用条件表达式来消除交叉连接的某些数据行。 + +```sql +语法:select <字段名> from <表名1> [inner] join <表名2> [on];-- 如果on后面没有加上连接条件,交叉连接和内连接在语法上是等同的,二者可以互换。 +on:用来设置内连接的连接条件。 +``` + +## 6.4外连接(OUTER JOIN) + +1.将连接的表分为基表和参考表,再以基表为依据返回满足和不满足条件的记录。 + +2.外连接可分为左连接和右连接。 + +## 6.4.1 左连接 + +```sql +语法:select <字段名> from <表名1> left [outer] join <表名2> on; +若表1的某行在表2中没有相匹配的行,那么表2返回的字段值均为null。 +``` + +## 6.4.2右连接 + +```sql +语法:select <字段名> from <表名1> right [outer] join <表名2> on; +若表2的某行在表1中没有相匹配的行,那么表1返回的字段值均为null。 +``` + +## 6.5子查询 + +它可以实现多表查询。它指的是将一个查询语句嵌套在另一个查询语句中。可以在select、update、delete中使用。经常在where子句中。 + +```sql +在where中 +语法:where <表达式> <操作符> (子查询) +操作符可以是比较运算符和in、 not in、exists、not exists等关键字 +``` + +注意事项: + +1.可以嵌套在SQL语句中任何表达式出现的位置; + +2.只出现在子查询中而没有出现在父查询中的表不能包括在输出列中,例:select * from (select * from result) as temp; + +## 6.6正则表达式 + +主要用来查询和替换符合某个模式(规则)的文本内容。 + +``` +语法:属性名(属性名也是字段名) regexp `匹配方式` +``` + -- Gitee