本文是基本的SQL查询语句用法,内容主要来自Alan Learning SQL这本书第3章,包括select,from,where,group by,having,order by六个查询子句,后续会深入介绍每个查询子句的用法。

1. 查询机制

在已经创建数据库连接的情况下,当查询被发送到服务器端时,服务器在执行查询语句之前需要进行检查:

  1. 用户是否有权限执行该语句?
  2. 用户是否有权限访问目标数据?
  3. 语句的语法是否正确?

通过3项检查后,传递给查询优化器,从from语句开始执行。

2. 查询语句

一般来说,查询语句包含以下6个子句中的2-3个

3. select子句

select子句用于结果集中需要显示的列

尽管select子句是查询语句中第一个组成部分,但实际上在数据库服务中,它是最后被评估的,因为在确定结果集最后包含哪些列之前,必须先要知道结果集所有可能的列。

select 语句除了能选择表中的列,还可以包含其他内容,包括:

  1. 字符
  2. 表达式,比如emp_id*3.14
  3. 调用内建函数,比如UPPER(lname)
  4. 用户自定义函数

也可以对查询的列名设置别名,例如:

mysql> SELECT emp_id,

-> 'ACTIVE' status,

-> emp_id * 3.14159 empid_x_pi,

-> UPPER(lname) last_name_upper

-> FROM employee;

status, empid_x_pi等是列的别名,使得输出结果更容易理解,有时为了清楚的表示别名,一般加挂检测AS

如:mysql> SELECT emp_id,

-> 'ACTIVE' AS status,

-> emp_id * 3.14159 AS empid_x_pi,

-> UPPER(lname) AS last_name_upper

-> FROM employee;

4. from子句

from子句 定义查询中所使用的表,以及这些表的连接方式。

4.1 表的概念

其中表既包括永久表(create table产生的表),也包括临时表(子查询所返回的表),虚拟表(使用create view子句创建的试图)

比如子查询产生的表

SELECT e.emp_id, e.fname, e.lname

FROM (SELECT emp_id, fname, lname, start_date, title

FROM employee) e;

4.2 表的连接

目前表中为ANSI标准,引入了ON语句,举例:

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

ON e.dept_id = d.dept_id;

表别名也可以使用AS关键词,比如 FROM employee AS e INNER JOIN department AS d

5. Where子句

Where子句用于在结果集中过滤掉不需要的行。

可以使用 AND,OR,NOT包含更多的条件

SELECT emp_id, fname, lname, start_date, title

FROM employee

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

ON d.dept_id = e.dept_id

GROUP BY d.name

HAVING count(e.emp_id) > 2;

7. order by子句

order by子句对结果集中原始列或者计算表达式的结果进行排序。

例如:

SELECT open_emp_id, product_cd

FROM account

ORDER BY open_emp_id, product_cd;

默认是排序为升序,如果需要降序,可以加上关键词DESC

SELECT account_id, product_cd, open_date, avail_balance

FROM account

ORDER BY avail_balance DESC;

也可以对表达式进行排序:

SELECT cust_id, cust_type_cd, city, state, fed_id

FROM customer

ORDER BY RIGHT(fed_id, 3);

还可以制定列的位置进行排序,比如用第2列和第5列进行排序:

SELECT emp_id, title, start_date, fname, lname

FROM employee

ORDER BY 2, 5;

SQL查询语句基础构成相关推荐

  1. 2015-12-01 SQL查询语句基础

    1.查询全体学生的学号与姓名 select sno,sname from student; 3.查询全体学生的详细信息 select * from student; 4.查询全体学生的姓名及其出生年份 ...

  2. MySQL数据库高级SQL查询语句(单表查询,多表联合查询)

    目录 SQL查询语句 基础查询 条件查询 模糊查询 字段控制查询 排序 聚合函数 分组查询 having子句 limit分页查询 多表连接查询 SQL查询语句 数据查询语言. 数据库执行DQL语句不会 ...

  3. 【mysql技术内幕1】mysql基础架构-一条SQL查询语句是如何执行的

    文章目录 1 一条SQL查询语句是如何执行的 2 mysql体系结构 3 InnoDB存储引擎 4 总结 1 一条SQL查询语句是如何执行的 ​ 通常我们使用数据库,都是将数据库看成一个整体,我们的应 ...

  4. 预编译sql查询语句_频繁查询重新编译– SQL查询性能杀手–检测

    预编译sql查询语句 previous part of this article, we presented query recompilation basics. We explained when ...

  5. SQL查询语句注入实战(手注,显注)

    目录 前言 条件查询 查询顺序 Limit限制结果 联合查询 显错位 SQL内置函数 自带数据库和表 mycli辅助命令 Sql注入类型 实战靶场 判断类型是否存在注入点,类型 看看他有几个字段 数据 ...

  6. SQL查询语句大全(转)

    转自https://www.cnblogs.com/chenglc/p/8421492.html 重点参考https://blog.csdn.net/g1418377085/article/detai ...

  7. (转)经典SQL查询语句大全

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  8. 「MySQL」- 复杂的SQL查询语句

    任意门 前言 聚合查询 1.聚合函数 count函数 sum函数 avg函数 max函数 min函数 2.分组查询 having子句 多表查询 1.笛卡尔积 2.内连接 3.外连接 左外连接 右外连接 ...

  9. 听说你写sql很溜,一条sql查询语句是如何执行的?

    我们项目中必不可少要与数据库接触,那么一条sql查询语句是如何执行的呢? 本文以MySQL数据库为例.MySQL是典型的C/S架构(client客户端/server服务端),客户端进程向服务端进程发送 ...

最新文章

  1. 使用VLC搭建RTSP服务器
  2. python爬虫入门教程-Python爬虫入门教程——爬取自己的博客园博客
  3. Java 启动和停止界面_IntelliJ IDEA 2019.3 发布,启动更快,性能更好(新特性解读)...
  4. eclipse export jar file 和 runnable jar file 的区别
  5. linux清理整个磁盘空间,一次Linux磁盘空间清理的经历
  6. WEB-INF下jsp页面如何访问
  7. WriteableBitmap 巧学巧用
  8. 查看设置本机共享文件 net share
  9. Swift - 属性观察者(willSet与didSet)
  10. CSDN《程序员》杂志创始人蒋涛-推荐《程序员职场第一课》
  11. 四种插入数据的MySQL语句比较
  12. 是不让页面重新渲染元素~·
  13. VS2005远程调试
  14. 【纯·干货】你会用到的期刊读Paper发论文写论文必备网站及各种小助手,不定期持续更新中~
  15. 捋一捋Python的文件处理(上)
  16. Windows10永久关闭Windows Defender
  17. mac输密码麻烦?一位数密码来了!
  18. 用TortoiseGit Git clone时Load Putty Key是灰色的
  19. Android为App签名(为apk签名)
  20. 什么叫水平,不是看懂了叫水平,也不是会用了就叫水平,更不是懂得更多才叫有水平,而是知道如何做才能做得更好才叫真正有水平?...

热门文章

  1. 深度学习(四十二)——深度强化学习(5)PPO, IMPALA, Hierarchical RL, OpenAI
  2. kafka to mysql_Flink : kafka to mysql example
  3. IMYAOPTableView 源码学习笔记
  4. linux安装python3.6以后报错处理
  5. ORACLE SQL调优之执行计划与隐藏参数_complex_view_merging
  6. bash參考手冊之六(Bash特性)
  7. python web cgi
  8. PowerDesigner 16安装注意事项
  9. Jmeter(一)-精简测试脚本
  10. 数据库连接出错,请检查连接字串"的多种问题解决办法