本文是基本的SQL查询语句用法,内容主要来自Alan Learning SQL这本书第3章,包括select,from,where,group by,having,order by六个查询子句,后续会深入介绍每个查询子句的用法。
1. 查询机制
在已经创建数据库连接的情况下,当查询被发送到服务器端时,服务器在执行查询语句之前需要进行检查:
2. 查询语句
3. select子句
尽管select子句是查询语句中第一个组成部分,但实际上在数据库服务中,它是最后被评估的,因为在确定结果集最后包含哪些列之前,必须先要知道结果集所有可能的列。
select 语句除了能选择表中的列,还可以包含其他内容,包括:
-> emp_id * 3.14159 empid_x_pi,
-> UPPER(lname) last_name_upper
status, empid_x_pi等是列的别名,使得输出结果更容易理解,有时为了清楚的表示别名,一般加挂检测AS
-> emp_id * 3.14159 AS empid_x_pi,
-> UPPER(lname) AS last_name_upper
4. from子句
其中表既包括永久表(create table产生的表),也包括临时表(子查询所返回的表),虚拟表(使用create view子句创建的试图)
SELECT e.emp_id, e.fname, e.lname
FROM (SELECT emp_id, fname, lname, start_date, title
SELECT e.emp_id, e.fname, e.lname, d.name dept_name #d.name 使用别名dept_name
FROM employee e INNER JOIN department d ## 使用了表别名employee e
表别名也可以使用AS关键词,比如 FROM employee AS e INNER JOIN department AS d
5. Where子句
SELECT emp_id, fname, lname, start_date, title
WHERE (title = 'Head Teller' AND start_date > '2006-01-01')
OR (title = 'Teller' AND start_date > '2007-01-01');
6. group by和having子句
group by对查询结果进行分组,having对分组结果进行过滤(类似于where子句,但此处不能用Where子句,二者的区别https://www.cnblogs.com/yzdqxing/p/4603508.html)
SELECT d.name, count(e.emp_id) num_employees
FROM department d INNER JOIN employee e
7. order by子句
order by子句对结果集中原始列或者计算表达式的结果进行排序。
SELECT open_emp_id, product_cd
ORDER BY open_emp_id, product_cd;
SELECT account_id, product_cd, open_date, avail_balance
SELECT cust_id, cust_type_cd, city, state, fed_id
还可以制定列的位置进行排序,比如用第2列和第5列进行排序: