《深入浅出的SQL》学习笔记

初识SQL

SQL以数据的逻辑集合对数据进行操作。实际上数据是从一个称为表(table)的集合中选出来的。与行处理方式不同,集中处理方式允许程序设计员只告诉数据库需要什么,而不是每一项数据该怎么处理。
行处理:行处理需要程序设计员设计数据怎么处理、同一时间只处理一个记录。

第一章 数据库和表

数据库由表构成,数据库是保存表和其他SQL结构的容器
表是数据库中包含的数据结构
数据库中的信息组成了表
表中的列是数据种类
表中的行是面对一个对象的所有信息
正儿八经
列是存储在表中的一块数据
行是可以描述一件事物的列的集合
列和行构成了表
创建数据库
“>”命令行提示符,在后面添加SQL命令
SQL中数据库名和表名不能出现空格,用”_”代替

  1. 创建包含所有表的数据库
CREAT DATABASE Lemon_list; 
  1. 进入数据库
USE DATABASE Lemon_list;
  1. 创建表
    CREAT TABLE语句
    必须以“;”结尾,用来表示命令结尾

  2. 数据类型
    字符 > VARCHAR
    日期 > DARE
    记录日期和时间 > DATETIME
    预先设定好长度的数据 > CHAR or CHARACTER
    负数 > JNT or JNTEGER(jnteger)
    大型文本数据 > BLOB
    “提供数值空间,知道装满为止 > DEC or DECJMAL
    INT”

  3. 检查表

DESC my_contacts;
  1. 不可以重建已经存在的表或列

  2. 删除表

DROP TABLE my_concats;

这个操作会删除表及表里的全部内容
9. 向表中添加数据—INCERT语句

INCERT INTO MY_contacts
(column1_name,column2_sex,……)
VALUES
(‘Merry’,’g’,’ ‘……);
注:
1. 列名和输入的信息保持一致
2.  每个列之间用”,”隔开
3. 	添加的数据‘’起来
4. 	int 、dec型数据不许加‘’
5. 改变列名顺序时也要同步修改输入信息的顺序
6. 列名可以省略,但输入信息的顺序必须与列名顺序相同
7. 可以选择性的输入信息,省略部分的列
  1. SELECT语句查看表中的内容
SELECT * FROM my_countact;

凡是我们没有输入数据的地方都会显示为NULL
11. 设置不接收NULL的列

CREATE TABLE my_lemon
(
  last_name VARCHAR(10)NOT NULL,
  first_name VARCHAR(10)NOT NULL
);
  1. deault 设置默认值
    在没有特定输入该列的值时,填入默认值
CREATE TABLE my_lemon
(
  last_name VARCHAR(10),
  first_name VARCHAR(10)NOT NULL,
  age INT(2)DEFULT 18
);

第二章 SELECT语句

  1. WHERE 语句的用法
    寻找my_dear
SELECT * From my_contacts WHERE first_name = ‘Isis’;

注:“=”means “是”
“*” means“寻找的范围是所有的列”

  1. 实例:创建一个数据库并按某一列查询
CREATE DATABASE drink;
USE DATABASE drink;
CREATE TABLE my_drink
(
	drink_name VARCHAR(20) NOT NULL,
	main  VARCHAR(10),
	amount1 DEC(2,1),
	seconds VARCHAR(20),
	amount2	DEC(3,2)
);
INSERT INTO my_drink VALUES
(
  ‘Blackthorn,Blue Moon,Oh My Gosh,Lime Fizz,Kiss on the Lips‘,‘tonic water,soda,peach,Sptite,cherry juice’,1.5,1.5,1,1.5,2,’pineapple juice,blueberry juice,pineapple juice,lime juice,opricot juice’,1,0.75,1,0.75,7’
);
SELECT * FROM my_drink WHERE drink_name =’Blue Moon’;

第三章 DELETE 和 UPDATE

  1. 数据类型格式惯例
    需要加单引号的数据类型:BLOB、 DATE、 DATETIME、CHAR 、VARCHER
    不需要加单引号的数据类型:JNT、INT、DEC
    单引号是一个特殊的字符:是SQL中的保留字符,表示文本字符集的开始和结束,总是成对出现。
    若是在一个文本中出现单引号,则需➕反斜杠(\’)对单引号进行转义或在单引号前再加一个单引号(’’)。表示这个单引号是字符串 的一部分,这种行为称为转义。
  2. SELECT特定列来限制结果数量
    如何在一张表中之提取出我们想知道的列,而不是将整张表中所有的列都罗列出来呢?
SELECT * FROM My_table;
 这里的*表示选取所有的列,那么我们就可以从这里下手:
SELECT drink_name,main,seconds
FROM My_table;
这样我们就得到了所有想要得到的列,

例:如果要寻找名叫Blue Moon的酒的主要成分和价格该怎么做呢?

SELECT drink_name,main,valu
FROM My_table WHERE 
drink_name=’Blue Moon’;
 注:在文本中选择数据时要在WHERE字句中使用单引号
  1. 结合查询
    如果我想在附近找到一家好吃的火锅店,应该怎么办呢?
SELECT location
FROM My_nearby 
WHERE
name=’hotport’
AND
rating=10;
  1. 比较运算符
    评分是10分的火锅店竟然没有!!只能找到一家评分在8以上的火锅店,应该怎么做呢?
SELECT location
FROM My_nearby 
WHERE
name=’hotport’
AND
rating > 8;
比较运算符:>、 <、 >=、 <=、<>不等于
  1. 对文本数据套用比较运算符
    小姐姐说有家名字以L开头的火锅店很好吃,但是她忘记了具体的名字,那么我们就可以这样
SELECT location
FROM My_nearby 
WHERE
name >= ’L’
AND
name < ’M’;
  1. OR,只需符合其中一个条件
    终于到火锅店了,好渴啊,想喝芒果汁或者苹果汁
SELECT juice_name
FROM juice
WHERE
main= ’mango’
or
main= ’apple’;
  1. 用IS NULL找到NULL
    哎,服务员,那个小哥哥喝的无色的饮料叫什么名字?
SELECT drink_name
FROM drinks
WHERE
color IS NULL;
  1. 关键字LIKE
    糟糕,我忘记小姐姐住在哪里了,是高新区,未央区还是雁塔区?选不了离她家最近的影院了……
SELECT location
FROM My_little_girl
WHERE
location LIKE%xian’;
     %即告诉软件我们要找的是以shanxi结尾的值
  1. 调用通配符
    “%” 是未知数量未知字符的替身
    “_”是一个未知字符的替身
  2. 结合AND和比较运算符选取一个范围
    小姐姐最近在减肥,只能吃热量在100-120卡路里的甜点,来帮小姐姐选份合适的蛋糕吧
SELECT cake_name
FROM cokes
WHERE
calories<=120
AND
calories>=100;
  1. 关键字BETWEEN
    相当于<= >=,用BETWEEN关键字可以更快的帮小姐姐选蛋糕哦
SELECT cake_name
FROM cakes
WHERE
calories BETWEEN 100 AND 120;
  1. 关键字IN
    其实细心的我知道小姐姐喜欢吃黑森林、芒果慕斯、抹茶切块,给她点其中一种,她对我的好感会不会提升呢?
SELECT cake_name
FROM cakes
WHERE 
name IN (‘Black Forest Cake‘,‘Mango Mousse‘,’Cut tea‘);
  1. 关键字 NOT IN
    吃完饭后去给小姐姐试下那条裙子吧,她穿上一定好看极了,但是小姐姐不喜欢橙色和黄色、绿色和棕色
SELECT cloth
FROM cloth_store
WHERE
color NOT IN(‘orenge’,’yellow’,’brown’);

或者

SELECT cloth
FROM cloth_store
WHERE NOT
color IN(‘orenge’,’yellow’,’brown’);
此外,NOT 不仅可以加在IN前,还可以这样用
SELECT location
FROM My_little_girl
WHERE NOT
location LIKE%shanxi’;
这样用
SELECT cake_name
FROM cakes
WHERE NOT
calories BETWEEN 100 AND 120;
但是一定要加在WHERE的后面,当NOT 与AND 或OR一起使用时,也要放在AND 或OR的后面

第四章 聪明的表设计

  1. DELETE 关键字
    小姐姐穿上我选的裙子真的很美,可以从愿望清单上删除这一项啦
DELETE FROM clown_info
WHERE activity=’buy a drice’;

注:
1) DELETE可以删除表中的一行或多行,根据其后面的WHERE子句决定
2) DELETE不可以删除列
3) DELETE后的WHERE语句可以使用AND、OR、LIKE、 BETWEEN、IN、NOT等,且和SELECT的用法相同
4) DELETE FROM your_table;
删除表中的每一行

  1. 利用INSERT 和DELETE语句更新表中某一行的数据
    小姐姐刚刚答应我一起去看电影,但是她想看王牌特工,而不是我准备好的速度与激情。没关系,谁让她喜欢呢,更新数据库吧

    step1:插入新的数据

INSERT INTO clown_info
VALUES
(‘The Fast and the Furious’,‘2020-5-20)
step2:删除旧的记录
DELETE FROM clown_info
WHERE
name=’ kingsman’
AND TIME=2020-2-20;
注:如果不确定你所删除的记录,可以先通过SELEC筛选,确认信息后再进行删除
  1. DELETE精确版步骤
    step1:用SELECT语句挑出你必须删除的记录
SELECT * FROM clown_info
WHERE
name=’kingman’;

step2:用INSERT插入新记录

INSERT INTO clown_info
VALUES
(‘The Fast and the Furious’,‘2020-5-20);

step3:用DELETE删除旧记录,此时用到的WHERE语句和SELECT用到的WHERE语句相同

DELETE FROM clown_info
WHERE
name=’kingman’;
  1. 更方便的UPDATE关键字
    还是修改电影名的问题
UPDATE clown_info
SET
name=’kingman’
WHERE name=’ The Fast and the Furious’;
UPDATE语句可以改变一列或多列的值,只需在SET语句中加入更多的column=value组就好了
UPDATE可以用来更新一列或多列的值,一切都由WHERE语句决定
  1. UPDATE能运用在多条记录上,它可以和基本数学运算一起使用,操作数据。
    王牌特工居然比速度与激情贵5元,那么两张票就是10元……
UPDATE clown_info
SET
cost=(cost+5)*2
WHERE
name=’kingman’;

第五章 ALTER

  1. 数据库中各个表之间并没有关系
  2. 原子性数据(AUTOMIC DATE):当数据具有原子性,则说明已经分隔到最小块,不能再分割
    原子性可以提高查询的准确性,提高查询效率
    具有原子性数据的表中的规则:
    1. 不会有多个类型相同的值
    2. 不会有多个存储相同数据的列
  3. 表的规范化
    规范表中没有重复的数据,减小数据库的大小
    提高查询效率
  4. INF第一规范式
    每个数据行必须具有原子性
    每个数据行都必须有独一无二的是识别项,成为主键(Primary key)
    还有第二范式、第三范式,但每多加一条范式就有多加一条更严格、更精确的规则
  5. 主键:是表中的某一列,可以使表中的每一条记录成为唯一的
    注:
    1. 主键不可以为NULL
    2. 插入新纪录时必须指定主键值
    3. 主键必需简洁
      主键中应只包含独一无二的数据,不包含其他的值
    4. 主键值不可被更改
      主键值必须保持唯一性
    5. 如何确定一个主键呢?既可以选定自然的值,当然也可以人造一个数值,就像我们的学号,就是人造的独一无二的主键
    6. 主键的创建一般在CREAT TABLE中进行
  6. SHOW关键字
    我们在前面了解到,如果想要在建好的表中添加一个列,就要重新开始CREAT TABLE,有没有什么更好的办法呢?
SHOW CREAT TABLE My_drink;

返回重建表但没有数据的
使用SHOW返回的代码中列明和表名会有反撇号
除非我们CREAT TABLE时制定默认数据值,否则程序会假设所有数据默认值是NULL
最后一行用来指明数据如何存储和如何使用字符集
不能靠Control+C、Control+V来创建表,需要对返回值进行处理
7. SHOW 的其他用法

SHOW COLUMNS FROM tablename;

显示表中所有列名及其数据类型
SHOW WARNINGS;
在建立和使用数据库时,若收到来自SQL命令所造成的错误信息,键入这个命令可以得到出错详情
8. PRIMARY KEY关键字
小姐姐还在一边,我怎么“跑神”了。我想在小姐姐表中新加一列主键,应该怎么做呢?
step1:

SHOW CREAT TABLE My_gril;

step2:copy返回值中多余的部分,将新的列名加入,并作说明

CREATE TABLE MY_littlegril
(
  id INT NOT NULL,
  ……,
  PRIMARY KEY (id)
);

注:主键不能是NULL、最后作说明PRIMARY KEY()
9. 关键字做列名?
加反撇号,但是会在之后处理数据时很麻烦
10. AUTO_INCREMENT关键字 自动递增

CREATE TABLE MY_littlegril
(
  id INT NOT NULL AUTO_INCREMENT,
  ……,
  PRIMARY KEY (id)
);

以一开始逐个递增
6. ALTER关键字

ALTER TABLR My_littlegril
ADD COLUMEN id INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMIARY KEY(id);

FRIST 把新列放在最前面
下次INCERT新记录时,会给id列自动赋值
第五章

  1. 关键字AFTER、BEFOR LAST FIRST SECOND THRID等
    灵活运用这些关键字来决定你新加入的列的位置
ALTER TABLE My_littlegril
ADD COLUMN id INT NOT NULL AUTO_INCREMENT LAST,
ADD PRIMIARY KEY(id);

哈!你可能要说,现在是新型冠状病毒高发期,你怕是在做梦吧!还想吃火锅,上课都是网络直播!!
嘻嘻,瞒不住你了,我只是一个没有火锅、没有电影、没有小姐姐的宅在家的小姐姐。

希望新型冠状病毒可以更快的得到遏制

中国,快点好起来吧!!

  1. RENAME表的更名换姓
ALTER TABLE My_littlegril
RENAME TO My_gril
  1. ALTER和CHANGE关键字
    更换列名和数据类型
ALTER TABLE My_gril
CHANGE COLUMN number id INT NOT NULL AUTO INCREMENT FRIST,
ADD PRIMARY KEY(id);
一条语句改变两列列名
ALTER TABLE My_gril
CHANFE COLUMN birthday bir_time DATE,
CHANGE COLUMN datetime da_time DATETIME;

如果修改数据类型,数据类型和原始数据类型可能会丢失数据
即便数据类型相同,也可能会发生截断。
例:varchar(10) 换为char(1) Apple 会变成 A
4. MODIFY关键字
改变列的数据类型但不改变列名

ALTER TABLE My_gril
MODIFY COLUMN birthday DATETIME;
  1. DROP关键字
    删除列
ALTER TEBLE My_gril
DROP COLUMN  birthday;

DROP会删除列中所有的数据,使用前最好用SELECT语句确认
6. 字符串函数
字符串函数可以选出文本列中的部分数据串
字符串:CHAR VARCHR中的数据都是字符串

  1. RIGHR关键字、LEFT关键字
    从列中选取指定数量的字符串
SELECT RIGHR(location,2)FROM My_contasts;
  1. SUBSTRING_INDEX 关键字
    SELECT 逗号以前的字符串
SELECT SUBSTRING_INDEX(location,,,1) FROM My_contasts;
1:指第一个逗号之前的所有内容
  1. 字符串辅助函数
    字符串辅助函数不会改变表中数据的值,他只是修改字符串格式后返回字符串
1)	SUBSRING(your_string,start_location,length)

截取一定长度的字符串

2)	UPPER(your_string)  LOWER(your_string)

改变整组字符串的大小写

3)	REVERSE(your_string)

反转字符串的字符排序

4)	LTRIM(your_string) RTRIM(your_string)

清除字符串左(右)的空格后返回字符串

5)	LENGTH(your_string)

返回字符串长度
8. 字符串函数的应用
以现有列的内容填入新的表中
例:

UPDATE My_contacts
SET column_name=RIGHT(location,2);

表中每一行中这一列都会被赋予新值,每次一行
注:字符串函数可以和SELECT、UPDATE、DELETE函数使用

第六章 SELECT进阶

本章讲到的函数都不会返回NULL

  1. ALTER当前数据
    根据当前列中的值添加新列的值
UPDATE movie_table SET category =’drama’ WHERE drama=’T’;

CASE表达式
用法:

UPDATE movie_table
SET new_column
CASE
 WHEN cloumn1=value1
	THEN new_ value 1
WHEN column2=value2
	THEN new_ value 2
WHEN column3=valumn3
	THEN new_value3
ELSE new_value4
END;
  1. ORDER BY关键字
  1. 将某一列的数据按顺序排列
    将A开头的该列记录排列,返回电影名和评分
SELECT film_name,grade
FROM movie_table
WHERE 
film_name LIKE ‘A’
category=’family’
ORDER BY title;

将所有记录按顺序排列
将A开头的该列记录排列,返回电影名和评分

SELECT film_name,grade
FROM movie_table
WHERE category=’family’
ORDER BY title;

数字开头会在前面
NULL会在数字前面
大写字母在小写字母前
A 1在A1前
2) 按两列或多列进行排序

SELECT film_name,grade
FROM movie_table
WHERE category=’family’
ORDER BY title,purchased,……;

查询结果会先按title列排序,再按purchased列排序
3) DESC反转查询结果顺序
用于ORDER BY 子句中的列名后,用来反转查询结果的顺序
4) ASC默认排序
与DESC放置位置相同
3. 函数:对数据值进行操作
4. SUM函数
将整列的值加总

SELECT SUM(sales)
FROM cookie_sales
WHERER name=’Lory’;

在WHERE中添加选择范围
5. GROUP BY关键字
完成分组加总

SELECT first_name,SUM(sales)
FROM cookie_sales
GROUP BY first_name
ORDER BY SUM(sales) DESC;

返回frist_name和SUM两列
6. AVG函数
对所有的列按要求汇总求平均

SELECT frist_name,AVG(sales)
FROM cookie_sales
GROUP BY frist_name;
  1. MIN MAX返回最大值最小值
SELECT frist_name,MAX(sales)
FROM cookie_sales
GROUP BY frist_name;

返回每个女孩的最高销量
先按女孩名称进行分类,在返回每一个女孩的最高销量
MIN用法与MAX函数用法相同,返回最小值
8. COUNT 函数
返回指定列中的行数

SELECT frist_name,COUNT(sales)
FROM cookie_sales
GROUP BY frist_name;

返回每个女孩的销售天数
9. DISTINCT关键字
返回所要求列中值不同的一列
10. LIMIT函数返回特定数量的列

  1. LIMIT+数量
SELECT frist_name,SUM(sales)
FROM cookie_sales
GROUP BY frist_name
ORDER BY SUM(sales)DESC
LIMIT 2;

只返回总销售量排在前二的姓名和销售量
2. LIMIT(0,1);
从第一个记录开始返回1个记录

SELECT frist_name,SUM(sales)
FROM cookie_sales
GROUP BY frist_name
ORDER BY SUM(sales)DESC
			SELECT(1,1);
		只返回销售量排在第二的姓名和销售量

第七章 多张表的数据库设计

  1. clown_tracking数据库模式
    模式(schema)用于表达数据库内的结构,包括表和列,还有各个表之间的连接方式

  2. 创建图表:为表创建图表可以协助我们分别看待表中的设计和其中的数据

  3. 外键:指表中的某一列数据借用了其他表的主键
    注:

    1. 外键必须用ALTER或 CREAT 语句来指定
    2. 外键使用的主键被称为父键(parent key)
    3. 主键使用的表被称为父表(parent table)
    4. 外键用于确认一张表中的某一行与另一张表中的某一行相对应
    5. 外键可以不唯一
    6. 外键值可以为NULL,表示在父表中没有相符的主键
  4. 外键约束
    约束:创建在结构内的键被称为约束
    引用完整性:插入外键的值必须来源于父表的来源列中,被称为引用完整性
    如果违反了规则,约束会阻止我们破坏表
    可以使用外键来引用父表中的唯一值
    外键不一定必须是父表的主键,但必须具有唯一性。

  5. 数据库模式

    1. 表中间的关系
      一对一
    2. A表中某条记录只能与B表中的一条记录相对应
      一对多
    3. A表中某条记录能与B表中的多条记录对应
      但B表中的某条记录只能与A表中的一条记录相对应
    4. 多对多
  6. 数据模式:junction table
    将两个表连在一起,需要一个junction table,存储着两个表中的用来存储两张表的主键。再遇到多对多的数据库模式时,则需要通过junction table链接两张表。
    通过junction table链接表时有几种方式,分别为:
    外链接,内链接,

    1. 第一范式(first normal form):数据列只包含具有原子性的数据,没有重复的数据组
    2. 第二范式(second normal form):只要所有列都是主键的一部分,或表中有唯一的主键列夫和第一范式,则符合第二范式
    3. 第三范式(third normal form):如果表中只有一条主键,且没有其他的组合键,则符合第三范式
  7. 组合键:当使用一列数据不唯一,可以通过两列数据组合在一起作为外键使用,所有的行都会具有唯一性,这就是组合键

  8. 函数依赖:当某列数据必须随着另一列的数据改变而改变,表示第一列函数依赖于第二列
    表示函数依赖的方式X.Y →X.Z
    X表示表的名称,Y表示表中的某条记录

  9. 部分函数依赖:在表中只有部分列与其他列有函数依赖关系,则称这张表具有部分函数依赖

  10. 传递依赖:对于任何非键列,如果改变某列的数据可能造成其他列的数据的改变,即为传递依赖

第八章 联结与多张表的操作

  1. 预填充表
    如何将父表中某列的值(例:fruit列:apple ,banana, pear)分别填充到子表中,占有子表中的一行?
UPDATE My_contacts
SET fruit1=SUBSTRING_INDEX(fruits,,,1)
SET fruits=SUBSTR(fruits,LENTH(fruit 1)+2)
SET fruit2=SUBSTRING_INDEX(fruit,,,1)
SET fruits=SUBSTR(fruits,LENTH(fruit 2)+2)
SET fruit1=SUBSTRING_INDEX(fruits,,,1)
SET fruits=SUBSTR(fruits,LENTH(fruit 3)+2)
  1. 查询的三种方法:即将父表中的数据填入子表,并设置主键
    1.
CREATE TABLE fruits
(
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
fruits varchar(10)
);
INCERT INTO fruits(fruit)
SELETE fruits FROM My_fruit
GROUP BY fruits
ORDER BY fruits;
	CRETE TABLE fruits AS
SELECT fruits FROM My_contacts
GROUP BY fruits
ORDER BY fruits;
ALTER TABLR fruits
ADD COLUMN id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
ADD fruits varchar(10);
	CREAT TABLE fruits
(
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
fruits varchar(10)
)AS
SELETE fruits FROM My_contacts
GROUP BY fruits
ORDER BY fruits;
  1. AS关键字
    可以讲SELECT的数据全部填入新的表中
  2. 列的别名(相关名称)
    为了简化查询,可以在第一次出现列的名称时AS后加上列的别名
  3. 内连接
    1. 内链接:内链接其实是通过查询中的某些条件移除某些数据的交叉连接
    2. 交叉连接:CROSS JOIN
      将两张表中的数据分别连在一起,A表中每条记录中的数据分别与B表中的数据连接在一起
      4*5 的两张表 会产生20条记录
      交叉连接可以用来测试软件及其配置的速度
SELECT boys.boy ,boys.toy
FROM boys
CROSS JOIN 
toys;
3. 相等连接:返回两列数据相同的数据
SELECT boys.boy ,boys.toy
FROM boys
INNER JOIN 
toys
ON boys.boy_id=boys.toy_id;
  1. 不等链接:返回两列数据不相同的数据
SELECT boys.boy ,boys.toy
FROM boys
INNER JOIN 
toys
ON boys.boy_id<>boys.toy_id;
5. 自然连接:自然连接只有在连接的列在两张表中名称i相同的数据
SELECT boys.boy ,boys.toy
FROM boys
NORMAL JOIN 
toys;
  1. 外连接
  2. 笛卡尔连接
  3. 叉积
  4. 联合查询:查询中的查询
    在两张或多张表中查询数据时,需要多个条件

第九章 查询中的查询

1. 
SELECT boys.boy ,boys.toy
FROM boys
INNER JOIN 
toys
ON boys.boy_id=boys.toy_id
WHERE 
boys.interest IN
(    );

括号外的部分叫做外层查询,括号内的称为内部查询或子查询,即使再符合外层查询的条件上符合子查询的条件
将所有的文件放进一个根目录下

第十章 外联接、自联接与联合

  1. 外联接:一定会返回数据行,无论左右表中是否能找到匹配的项;返回某表中所有的记录和另一张表中所有相符的记录
  2. 左外联接(LEFT OUTER JOIN):会匹配左表中的所有值与右表中所有符合条件的值。在其返回的结果中所有集中的NULL表示左表中没有找到和右表符合的记录
  3. 右外联接(RIGHT OUTER JOIN):匹配右表中所有值与左表中所有符合条件的值。
  4. 一个表可以同时作为左表和右表
  5. 自引用外键:自引用表示引用同一张表中的另一列的键
  6. 自联接(SELF_JOIN):能将单一表当成两张具有相同性质的表进行查询
  7. 联合(UNION):另一种从多张表中取得数据的方式
    SELECT ……
    UNION
    SELECT ……
    规则:
    1) 每一个SELECT语句中列的个数必须相同
    2) 每个SELSECR语句中包含的表达式与统计函数也必须相同
    3) SQL会自动清除SELECT结果中重复的值
    4) 列的数据类型必须相同或者可以相互替换
    5) UNION ALL查看所有返回数据不清除重复的列
  8. 从联合创建表
CREAT TABLE My_job AS
SELECT title FROM xxx
SELECT title FROM xxx
UNION 
SELECT title FROM xxx;
  1. INTERSECT (交集) EXCEPT (差集)
    INTERSECT返回两个查询结果中的相同值
SELECT title FROM xxx
INTERSECT
SELECT title FROM xxx;
EXCEPT返回两张表中不同的值
SELECT title FROM xxx
EXCEPT
SELECT title FROM xxx;

第十一章 约束、视图与事务

  1. 检查约束(CHECK):限制可以插入某个列中的值,与WHERE语句相同都使用相同的条件表达式
    约束:限制可以插入表中的值
  2. 视图:是一张虚拟表,和其他表一样可以执行表的操作,
    但是虚拟表不会保存在数据库中
    将查询保存在数据内
CREATE VIEW name AS ……;
SELECT * FROM name;/* 查看视图*/
SHOW TABLE;显示视图

    1)	将复杂的查询简化为一张表
	2)	即使破坏表的数据结构,也不会破坏以来表的应用程序
	3)	创建视图可以隐藏读者无需看到的信息
  1. FROM语句需要表
    当SELSECT查询的结果是一张虚拟表时,若没有别名,SQL就无法取得其中的表
  2. 利用视图进行插入、更新和删除
    但若视图中使用了统计函数(SUM 、MAX、 MIN等),则无法用视图改变数据。如果视图中包含ORDER BY、GROUP BY等也不能改变数据
  3. 带有CHECK OPTION的视图
    检查每个进行INCERT或DELETE的查询,根据视图中的WHERE语句来决定这些查询是否可以继续进行
  4. 可更新视图:包含引用表里所有为NOT NULL的列
  5. 当视图使用完后:DROP VIEW name;
  6. 事务:在事务中如果所有步骤无法在正常条件下运行,则不会完成任何单一的步骤
START TRANSACTIONCOMMIT;所有程序代码发生改变
ROLLBACK;所有代码

在COMMIT之前数据库不会发生任何改变
9. 事务满足的性质:原子性、一致性、隔离性、持久性
10. 在使用事务之前必须采用正确的存储引擎,也就是在创建表时括号外的代码。必须是BDB或InnoDB之一
第十二章 安全性
11. 保护用户账号:
SET PASSWORD FOR’root’@localhost’ =PASSWORD(‘bashei23bcd’);
13. 根用户:默认为数据库的第一个用户,通常具有数据库的所有操控能力
14. 创建新用户:

CREAT USER Larry IDENTIFIED BY ‘ajh34d7uwia’;
  1. 给用户授权(GRANT):可以控制用户对表和列进行的操作
GRANT SELECT  My_contacts TO Lrry;

撤销权限(REVOKE):

 REVOKE  SELECT  My_contacts TO Lrry;

REVOKE……CASCADE;表示权限的撤销具有连锁反应,包括目标在内的被授权的人的权限都会被撤销。默认
REVOKE……RESTRICT;如果有人会受到影响,即可返回错误信息
16. 授权许可(GRANT OPTION)
17. 角色(role):

CREATE ROLE manager;创建
GRANT SELECT ON My_contacts TO manager;授予权限
GRANT manager TO Larry;授予角色
DROP ROLE manager;撤销角色
  1. WITH ADMIN OPTION:允许用户将角色授予其他人
GRANT manager TO Larry WITH ADMIN OPTION;

附录

  1. 特殊字符

  2. 四则运算 + - * /

  3. 比较运算符

  4. ANY、ALL、SOME
    ANY:大于号后面加上ANY会返回任何大与集合中的最大值;小于号后面加上ANY返回任何小于集合中的最小值
    ALL:大于号后面加上ALL会返回任何大与集合中的最小值;小于号后面加上ALL返回任何小于集合中的最大值
    SOME=ANY

  5. 数据类型
    BOLEAN:存储“true”或“false”或NULL
    INT:0~4294957295
    INT(SIGED):无符号整型
    BIGINT:9223372036854775808
    SMALLINT:-32768~32767
    DATE:YYYY-MM-DD
    DATETIME: YYYY-MM-DD HH-MM-SS
    TIMESTAMP:YYYYMMDDHHMMSS
    TIME: HH:MM:SS

  6. 临时表
    保存中间结果、捕获某个时刻表中的内容
    CREATE TEMPORARY TABLE name();

  7. 转换数据类型:CAST (your-column,type);
    将字符串格式的时间转换为DATE格式
    将整数转换为浮点数

  8. 查看当前使用账号:SELECT CURRENT_USER

  9. 查看时间:SELECT CURRENT_DATE

  10. 数字函数

2020年5月28日第一次修改
发现了许多非常愚蠢的错误,已经修改部分。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值