查询最简单的方式就是将表中的所有记录都查询出来。
select * from emp;
select field1, field2 from tablenam;
查询 field1 不重复的所有记录
select distinct field1 from table1;
查询所有 age 等于 20 并且 sex 为 0 的记录:
select * from table1 where age = 20 and sex = 0;
where关键字后面是一个条件或多个条件,可以由字段和 > , < , >= , <= , != 等比较运算符组成,多个条件可以由 or , and 等逻辑运算符进行组合。
上面是排序的基本语法,其中DESC和ASC是排序顺序的关键字,DESC代表降序排列,ASC代表升序排列,如果不加这个关键字,缺省默认为ASC升序排列。ORDER BY 后面可以也可以跟多个字段,比如按照 age 从小到大,score 从大到小排列:
select * from student order by age asc, score desc;
当 age 值一样的时候,就会按照 score 进行排序。如果是只排一个或者多个字段的值都相等,则这些记录会无序排列。
(MySQL) LIMIT:
offset_start 是需要截取的起始偏移量,row_count 指从起始偏移量截取的记录个数,offset_start 字段可以缺省,缺省默认为从0开始。
select * from table1 order by score desc limit 6, 10;
-- 缺省起始偏移量
select * from table1 order by score desc limit 3;
内连接:
select table1_field1, table2_field1 from table1, table2 where table1.field2 = table2.field2;
· 左连接:包含所有左边表中的记录甚至是右边表中没有和它匹配的记录。
select table1_field1, table2_field1
from table1 left join table2
on table1_field2 = table2_field2;
· 右连接:包含所有右边表中的记录甚至是左边表中没有和它匹配的记录。
select table1_field1, table2_field1
from table1 right join table2
on table1_field2 = table2_field2;
而这个语句则是通过 right join ... on ... 左连接语句来查询 满足条件 table1 中的 field2 字段等于 table2 中的 field2 字段的记录,并显示记录中 table1 中的 field1 字段和 table2 中的field1 字段,包括不满足条件的 table2 中的记录。
当查询的时候,需要用到的条件是另一个查询语句的结果,这时候就用到子查询。常用的关键字主要包括 in,not in,=,!=,exists、not exists 等。
主要语法为:
SELECT ... WHERE ... [ IN ] [ NOT IN ] [ = ] [ != ] [ EXISTS ] [ NOT EXISTS ] ( SELECT ... );
后面的括号中为子查询语句,需要注意的是 =,!= 这两个关键字必须要子查询的结果是唯一的。
联合有两个用法:union all,union。
SELECT ...
UNION ALL
SELECT ... ;
UNION ALL 合并两个查询语句的结果集,不去重,如果两条语句都查询出了某一条记录,则 UNION ALL 联合后的结果集会有两条这个记录。
SELECT ...
UNION
SELECT ... ;
UNION 也是合并结果集,但是是去重的,如果两条语句都查询出了某一条记录,则 UNION 联合后的结果集只会有一条这个记录。
以上就是一些基本 sql 查语句的用法,后面几个都没有写例子,而且仅仅看例子也不会有很深的理解。要掌握还是要进行练习,近来发现LeetCode上不仅有算法题,还有一些数据库的题,可以通过做那个题目来加深对SQL语句的掌握。上面还有很多其他的题目,shell 等其他的。LeetCode 真是一个不错的网站。