最近在看SQL的相关资料,找到了一个练习SQL语法的一个网址(SQLBolt’),全英的,但是可以借助翻译进行学习,当然啃生肉也可以,推荐给想入坑数据库的萌新
Tutorial 1-5
1. 选中特定内容:SELECT
select语句的作用是声明我们在某个数据库中需要寻找的数据。SQL中的一个个表格(table)可以看做是一个个实体(entity),其中每一列(row)即为一个个实例(instance)。通俗来说就是,表格是一个整体,而其中的每一列是一个整体的组成部分,比如table名为dog,其中列名就可能是colors,legs,kinds等等。
而select就是用于在一个表格(table) 中找到所需要的 列(column)。
语法 : select column_name from table_name;
注意: column_name的顺序会影响最终结果的顺序。
当table_name为 “ * ” 时代表选中所有列
原表
可以看到表名为movies,分为5列。
接下来选中title列
select后的表
在多选时只需要用" , "隔开即可。
条件匹配:WHERE
大多数情况下,我们需要的是特定条件下的查询结果,这时就要用到WHERE关键字。
语法 : SELECT column_name FROM table_name
WHERE condion
AND/OR condion
继续基于原表进行验证
查询在2000年之前的上映的电影
查询在2000年之后上映 并且由John Lasseter执导的电影
在WHERE中对字符的操作分为8种
关键字 | 注意事项 | 应用举例 |
---|---|---|
= | 大小写敏感,精确匹配 | col_name = “abc” |
!= 或 <> | 大小写敏感,精确匹配 | col_name != “abc” |
LIKE | 大小写不敏感,精确匹配 | col_name LIKE “abc” |
NOT LIKE | 大小写不敏感,精确匹配 | col_name NOT LIKE “abc” |
% | 仅用于大小写不敏感的LIKE与NOT LIKE,输出该列中包含%%之间字符的内容 | col_name LIKE %AT%(匹配"AT",“CAT”,“ATM”,“BATS”) |
_ | 仅用于大小写不敏感的LIKE与NOT LIKE,输出该列中以_之前的内容开头的内容 | col_name LIKE “AN_”(匹配"AND",“ANY"但是不会输出"AN”) |
IN(…) | 精确匹配,输出该列中包含()中条件的内容 | col_name IN (’'A",“B”) |
NOT IN (…) | 精确匹配,输出该列中不包含()中条件的内容 | col_name NOT IN(“A”,“B”) |
col_name LIKE "_"
注意: 仅匹配 " _ " 处缺失的一位字符!缺省几个字符就要打几个 “_”
大小写混用,只要个数匹配就可以。
在缺省的个数不匹配时出现查询不到的情况。
col_name IN (’'A",“B”)
结果筛选:DISTINCT, ORDER BY
DISTINCT
当表格中数据重复的较多时,可以用DISTINCT关键字进行对重复数据的筛选。
语法 : SELECT DISTINCT col_name FROM table_name
WHERE condition(s);
原表中包含大量John Lasseter,接下来进行对John Lasseter的筛选
注意: 在同时对多列同时筛选时,会出现无法清除重复项的情况,除非这些列内容一致。
ORDER BY
很多时候需要对筛选出来的数据进行排序,这是可以用ORDER BY完成,该关键字搭配使用的是 ASC(升序) ,DESC(降序),LIMIT(限制范围),OFFSET(偏移)。
语法 : SELECT col_name FROM table_name**
WHERE condition(s)
ORDER BY col_name ASC/DESC
LIMIT num_limit OFFSET num_offset;
其中,num_limit 限制结果的个数,比如 limit 5 就是,保留5项结果
num_offset为距离开头第一行的距离,如 OFFSET 5 即保留第6项以后的结果
合起来就是LIMIT num_limit OFFSET num_offset,保留 从第num_offset 项之后(不包含该行)的 num_limit 个内容。
按影片上映顺序依次排列
取第3-5个上映的电影
注意: 关键字大小写都不敏感!