SQL查询语句基础构成
本文是基本的SQL查询语句用法,内容主要来自Alan Learning SQL这本书第3章,包括select,from,where,group by,having,order by六个查询子句,后续会深入介绍每个查询子句的用法。
1. 查询机制
在已经创建数据库连接的情况下,当查询被发送到服务器端时,服务器在执行查询语句之前需要进行检查:
- 用户是否有权限执行该语句?
- 用户是否有权限访问目标数据?
- 语句的语法是否正确?
通过3项检查后,传递给查询优化器,从from语句开始执行。
2. 查询语句
一般来说,查询语句包含以下6个子句中的2-3个
3. select子句
select子句用于结果集中需要显示的列
尽管select子句是查询语句中第一个组成部分,但实际上在数据库服务中,它是最后被评估的,因为在确定结果集最后包含哪些列之前,必须先要知道结果集所有可能的列。
select 语句除了能选择表中的列,还可以包含其他内容,包括:
- 字符
- 表达式,比如emp_id*3.14
- 调用内建函数,比如UPPER(lname)
- 用户自定义函数
也可以对查询的列名设置别名,例如:
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查询语句基础构成相关推荐
- 2015-12-01 SQL查询语句基础
1.查询全体学生的学号与姓名 select sno,sname from student; 3.查询全体学生的详细信息 select * from student; 4.查询全体学生的姓名及其出生年份 ...
- MySQL数据库高级SQL查询语句(单表查询,多表联合查询)
目录 SQL查询语句 基础查询 条件查询 模糊查询 字段控制查询 排序 聚合函数 分组查询 having子句 limit分页查询 多表连接查询 SQL查询语句 数据查询语言. 数据库执行DQL语句不会 ...
- 【mysql技术内幕1】mysql基础架构-一条SQL查询语句是如何执行的
文章目录 1 一条SQL查询语句是如何执行的 2 mysql体系结构 3 InnoDB存储引擎 4 总结 1 一条SQL查询语句是如何执行的 通常我们使用数据库,都是将数据库看成一个整体,我们的应 ...
- 预编译sql查询语句_频繁查询重新编译– SQL查询性能杀手–检测
预编译sql查询语句 previous part of this article, we presented query recompilation basics. We explained when ...
- SQL查询语句注入实战(手注,显注)
目录 前言 条件查询 查询顺序 Limit限制结果 联合查询 显错位 SQL内置函数 自带数据库和表 mycli辅助命令 Sql注入类型 实战靶场 判断类型是否存在注入点,类型 看看他有几个字段 数据 ...
- SQL查询语句大全(转)
转自https://www.cnblogs.com/chenglc/p/8421492.html 重点参考https://blog.csdn.net/g1418377085/article/detai ...
- (转)经典SQL查询语句大全
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...
- 「MySQL」- 复杂的SQL查询语句
任意门 前言 聚合查询 1.聚合函数 count函数 sum函数 avg函数 max函数 min函数 2.分组查询 having子句 多表查询 1.笛卡尔积 2.内连接 3.外连接 左外连接 右外连接 ...
- 听说你写sql很溜,一条sql查询语句是如何执行的?
我们项目中必不可少要与数据库接触,那么一条sql查询语句是如何执行的呢? 本文以MySQL数据库为例.MySQL是典型的C/S架构(client客户端/server服务端),客户端进程向服务端进程发送 ...
最新文章
- 使用VLC搭建RTSP服务器
- python爬虫入门教程-Python爬虫入门教程——爬取自己的博客园博客
- Java 启动和停止界面_IntelliJ IDEA 2019.3 发布,启动更快,性能更好(新特性解读)...
- eclipse export jar file 和 runnable jar file 的区别
- linux清理整个磁盘空间,一次Linux磁盘空间清理的经历
- WEB-INF下jsp页面如何访问
- WriteableBitmap 巧学巧用
- 查看设置本机共享文件 net share
- Swift - 属性观察者(willSet与didSet)
- CSDN《程序员》杂志创始人蒋涛-推荐《程序员职场第一课》
- 四种插入数据的MySQL语句比较
- 是不让页面重新渲染元素~·
- VS2005远程调试
- 【纯·干货】你会用到的期刊读Paper发论文写论文必备网站及各种小助手,不定期持续更新中~
- 捋一捋Python的文件处理(上)
- Windows10永久关闭Windows Defender
- mac输密码麻烦?一位数密码来了!
- 用TortoiseGit Git clone时Load Putty Key是灰色的
- Android为App签名(为apk签名)
- 什么叫水平,不是看懂了叫水平,也不是会用了就叫水平,更不是懂得更多才叫有水平,而是知道如何做才能做得更好才叫真正有水平?...
热门文章
- 深度学习(四十二)——深度强化学习(5)PPO, IMPALA, Hierarchical RL, OpenAI
- kafka to mysql_Flink : kafka to mysql example
- IMYAOPTableView 源码学习笔记
- linux安装python3.6以后报错处理
- ORACLE SQL调优之执行计划与隐藏参数_complex_view_merging
- bash參考手冊之六(Bash特性)
- python web cgi
- PowerDesigner 16安装注意事项
- Jmeter(一)-精简测试脚本
- 数据库连接出错,请检查连接字串"的多种问题解决办法