SQL语句
SELECT * FROM ...
1.SELECT 子语句用于指定需要查询的字段,可以包含表达式,函数值等。
2.SELECT 在关系操作中被称为投影(Projection)
3.FROM后接需要查询的表名称
如:SELECT * FROM family_members;
SELECT [specific columns]
1.选择需要查询的特定的列
2.FROM 后跟表名称
如:SELECT name, num_books_read FROM family_members;
WHERE...[Equals]
1.从表中选择特定的行,我们使用WHERE关键字
2.以下示例表示在表名为family_members中搜索行名为species的列
如:SELECT * FROM family_members WHERE species = 'human';
WHERE...[Greater than]
1.利用WHERE关键字进行数值比较选择出匹配条件的行
如:SELECT * FROM family_members WHERE num_books_read > 0;
WHERE...[Greater than or equal]
1.哪里...大于或等于
2.利用WHERE语句做比较性搜索,满足数值条件者返回结果
3.如:select * from family_members where num_books_read >= 180;
4. 比较条件如下:
= "equal to"
> "greater than"
< "less than"
>= "greater than or equal to"
<= "less than or equal to"
AND
1. 在使用where语句时,AND关键字可以同时搜索多个属性
2.如下,在表frinds...表中搜索匹配高度大于25并且叫做cat的行
3.SELECT * FROM friends_of_pickles WHERE height_cm > 25 AND species = 'cat';
OR
1.或,在where语句中的匹配条件中做或运算,满足任意一个条件的行返回结果
2.如:SELECT * FROM friends_of_pickles WHERE height_cm > 25 OR species = 'cat';
IN / NOT IN
1.在where语句中列出可能匹配的条件,IN类似同时包含的关系,NOT IN可以做反选
2.如下,在表中匹配行选项为cat和human的行数据,是同时显示
3.SELECT * FROM friends_of_pickles WHERE species IN ('cat', 'human');
DISTINCT(去重)distinct
1.在SELECT语句后跟distinct后,搜索的结果中就不会出现重复行
2.SELECT DISTINCT gender, species FROM friends_of_pickles WHERE height_cm < 100;
ORDER BY (排序)
1.按某种属性对行进行排序,用于对对查询的结果进行排序
2.如下,在表friends...中以name行为条件行进行排序
3.SELECT * FROM friends_of_pickles ORDER BY name;
LIMIT [# of returned row](仅显示前...行的数据)
1.通常表中包含百万行,可能需要一段时间才能获取所有数据,如果只想查看表中的一些数据时可是使用limit
2.一般写在条件语句的最后做限制,和ORDER BY语句配合使用,排序后显示前多少行的数据
3.如下,匹配friends...表中,以height_cm行排序,并显示前两行
4. SELECT * FROM friends_of_pickles ORDER BY height_cm LIMIT 2;
COUNT(*) (统计表的行数)
1.统计表的行数
2.SELECT COUNT(*) FROM friends_of_pickles;
COUNT(*)[...WHERE]
1.结合where条件语句做筛选,对选择的结果做统计计数处理
2.SELECT COUNT(*) FROM friends_of_pickles WHERE species = 'human';
SUM (求和)
1.使用SUM来对搜索的关键字的返回值求和
2.SELECT SUM(num_legs) FROM family_members;
AVG(取平均值)
1.对给定的关键字返回的结果值做平均值计算
2.如下,num_legs为FROM family_members表中的一个列名称
3.SELECT AVG(num_legs) FROM family_members;
MAX and MIN (取最大值和最小值)
1.对给定的列,返回的结果值取最大值和最小值
2.SELECT MIN(num_legs) FROM family_members;
GROUP BY (分组)
1.分组操作和其它的关系不同,因为它改变了关系的结构
2.可以对GROUP BY语句使用COUNT,SUM,AVG,MAX,MIN等数值运算语句
3.如下,对列名species的数据分组后做统计计数运算
4.SELECT COUNT(*), species FROM friends_of_pickles GROUP BY species;
Nested queries(嵌套查询)
1.可以在查询语句中嵌套另一个查询来做筛选条件
2.SELECT * FROM family_members WHERE num_legs = (SELECT MIN(num_legs) FROM family_members);
NULL / NOT NULL (空/非空)
1.有时候在给定和行中,是没有值的,IS NULL 和 IS NOT NULL
2.不能用=或者!=来表示
3.SELECT * FROM family_members WHERE `favorite_book` is not null;
Date (日期比较)
1.可以对日期格式做比较,利用< , > 大于和小于做比较
2.SELECT * FROM celebs_born WHERE birthdate > '1980-08-17';
连接查询:
Inner joins(内连接)
1.内连接返回两个表中满足条件的所有数据,不满足条件的不显示
2.如下,将character.name表中的name列和character_tv_show.tv_show_name表中的tv_show_name列通过character_tv_show表的对应关系连接后显示
3.SELECT character.name, character_tv_show.tv_show_name
FROM character
INNER JOIN character_tv_show
ON character.id = character_tv_show.character_id;
Multiple joins(多个连接)
1.将多个表按照条件进行重新组合
2.如下,将A表和B表按照C表的对应列进行连接
3.SELECT character.name, tv_show.name
FROM character
INNER JOIN character_tv_show
ON character.id = character_tv_show.character_id
INNER JOIN tv_show
ON character_tv_show.tv_show_id = tv_show.id;
Joins with WHERE (joins和where语句混用)
1.将连接到哪里,使用where语句做子连接,将joins语句和where语句混合使用
2.如下,将A表和B表根据C表的对应关系做连接显示,并且对显示结果做where语句筛选显示
3.SELECT character.name, tv_show.name
FROM character
INNER JOIN character_tv_show
ON character.id = character_tv_show.character_id
INNER JOIN tv_show
ON character_tv_show.tv_show_id = tv_show.id WHERE character.name != 'Barney Stinson' AND tv_show.name != 'Buffy the Vampire Slayer';
Left joins(左连接)
1.左外连接连接的左表显示全部内容,右表只显示匹配的内容,没有匹配的显示null
2.如下,将A表和B表更具C表的对应关系做左连接显示,A表显示所有项,B表显示匹配的项而不是全部
3.SELECT character.name, tv_show.name
FROM character
LEFT JOIN character_tv_show
ON character.id = character_tv_show.character_id
LEFT JOIN tv_show
ON character_tv_show.tv_show_id = tv_show.id;
Table alias (表别名)
1.当查询的名称太长时,可以对这些名称较长的表名做别名处理,这样就可以写更短的查询
2.格式为 AS *alias_name*
3.SELECT c.name, t.name
FROM character AS c
LEFT JOIN character_tv_show AS ct
ON c.id = ct.character_id
LEFT JOIN tv_show AS t
ON ct.tv_show_id = t.id;
Column alias (列别名)
1.除了给表创建别名外,还可以给列创建别名
2.SELECT character.name AS character, tv_show.name AS name
FROM character
LEFT JOIN character_tv_show
ON character.id = character_tv_show.character_id
LEFT JOIN tv_show
ON character_tv_show.tv_show_id = tv_show.id;
Self joins (自连接)
1.将一个表的一部分当做镜像做连接显示
2.如下,
3.SELECT r1.name AS object, r2.name AS beats
FROM rps AS r1
INNER JOIN rps AS r2
ON r1.defeats_id = r2.id;
LIKE (检索对应值)
1.select * from 表名 where 字段名 like 对应值(子串)
2.该语句主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的
3.SQL中 like的通配符:
百分号(%) : 代表一个或多个字符
下划线(_) : 代表一个字符
4.如:SELECT * FROM robots WHERE name LIKE "%Robot%";
CASE (条件判断语句)
1.SQL语句中的CASE语句与高级语言中的switch语句,是标准SQL的语法,适用与一个条件判断有多种值的情况下分别执行不同的操作
2.如下,条件为human的值,在num_legs列中匹配的为2否则为4
3. SELECT *,
CASE WHEN species = 'human' THEN 2 ELSE 4 END AS num_legs
FROM friends_of_pickles;
SUBSTR(截取字符串)
1. SUBSTR(location,1, 5) :匹配location列中字符的前1-5的字符
SUBSTR(location, -4) :匹配location列中字符的后4个字符
2.如下,显示robots表中location列中匹配后2个字符为NY的值
3.SELECT * FROM robots WHERE SUBSTR(location, -2) LIKE 'NY';
COALESCE (列表)
1.coalesce()括号中跟列表,为列名称,显示返回不为null(空)的值,为空则显示下一列
2.如下,合并tank,gun,sword三列,合并显示在weapon列中,而合并时三列都有的值只显示tank列(第一列)的值,而三列都为null的值就只显示null
3.SELECT name, COALESCE(tank,gun,sword) AS weapon FROM fighters;