SQL基础语法-查询__水果先生的博客-程序员宅基地

技术标签: SQL  

基本查询

SQL分类

数据操纵语言(DML Data Manipulation Language)

SELECT(查询)
INSERT(插入数据)
UPDATE(更新数据)
DELETE(删除数据)

数据定义语言(DDL Data Definition Language)

CREAT
ALTER
DROP
RENAME
TRUNCATE

数据控制语言(DCL Data Control Language)

GRANT(比如授权远程连接、权限授权)

事件(Transaction)

COMMIT
ROLLBACK

基本查询语法

②SELECT *						【SELECT 子句】
①FROM 数据来源(可以是数据表)	【FROM 子句】

注意:

  • 以上两个子句在数据库中执行是由顺序的,先执行from后执行select;*表示查询所有字段信息,此处也可以使用字段名,查询指定字段的信息
  • 在字段名前加DISTINCT关键字,可以去除重复信息
  • 别名的使用,可以使用AS也可以不用,注意在FROM子句中数据来源使用别名时,不要使用AS
  • 字段内容是数字类型的支持四则运算

限定查询

语法

③SELECT *						【SELECT 子句】
①FROM 数据来源(可以是数据表)	【FROM 子句】
②WHERE 过滤条件					【WHERE 子句】
  • WHERE 子句是对数据进行条件判断,之后显示出满足条件的数据
  • BETWEEN AND的使用,小的数据在前,大的数据在后,对日期和数字可用,且BETWEEN AND被数据认为是一个判断条件,执行效率快,a > b AND a < c 数据库认为是两个判断,执行效率较慢
  • UNION ALL的使用,用于连接或操作,相比OR,可以将查询结果显式的合并在一起并且避免索引失效
  • 判断语句ISIS NOTINNOT IN

模糊排序查询

模糊查询

  1. _:表示任意一个字符
  2. %:表示任意个任意字符
  3. 实现模糊查询要使用LIKE关键字
    基本语法:
③SELECT 
①FROM 
②WHERE 模糊查询的字段 LIKE 模糊查询的条件

排序查询

排序查询使用关键字ORDER BY
基本语法:

③SELECT *						【SELECT 子句】
①FROM 数据来源(可以是数据表)	【FROM 子句】
②WHERE 过滤条件					【WHERE 子句】
④ORDER BY 排序的字段 ASC|DESC 	【ORDER BY 子句】

注意:
ORDER BY子句在SELECT子句之后执行,可以使用SELECT子句中使用的别名
排序的字段内容类型是数字或日期(英文也可以)

多表查询

  1. 多表查询就是从多张数据表中查询
  2. 多表查询又叫连接查询
  3. 多表查询会出现笛卡尔积,需要在WHERE中定义条件去除后显示(因为笛卡尔积是在产生后被消除不显示,所以数据量的时候不能用多表查询,消耗性能)

连接查询

内连接查询

内连接查询,只查询满足条件的数据,默认的就是内连接查询
可以使用 INNER JION...ON... 关键字在JOIN之后加入另一张数据表,在ON之后消除笛卡尔积

外连接查询

外连接查询分为:左外连接查询、右外连接查询、全外连接查询
左外连接查询和右外连接查询可以使用(+)来表示,注意位置与名称是相反的,且此写法只在ORACLE中有效,通用的写法如下

FROM (表1) LEFT OUTER JOIN (表2) ON (消除笛卡尔积语句)	左外连接
FROM (表1) RIGHT OUTER JOIN (表2) ON (消除笛卡尔积语句)	右外连接
FROM (表1) FULL OUTER JOIN (表2) ON (消除笛卡尔积语句)	全外连接

常用函数

COUNT(*|字段名)统计查询到的内容非空的数据量
SUM(字段名)对该字段的内容求和
AVG(字段名)求平均数
MAX(字段名)求最大值
MIN(字段名)求最小值
SYSDATE动态显示当前系统时间
NVL(expression1,expression2)优先返回expression1的结果,当1的结果为null时,返回expression2的结果,两者都为null时返回null

分组统计查询

使用GROUP BY子句,基本语法如下:

④SELECT *						【SELECT 子句】
①FROM 数据来源(可以是数据表)	【FROM 子句】
②WHERE 过滤条件					【WHERE 子句】
③GROUP BY 字段名					【GROUP BY子句,对满足条件的数据进行分组】
⑤ORDER BY 排序的字段 ASC|DESC 	【ORDER BY 子句】

分组统计查询的三个规则

  1. 如果SELECT子句中使用了统计函数,同时没有BROUP BY子句的话,SELECT子句中只允许有统计函数,不允许出现字段名
  2. 如果使用了BROUP BY子句,那么SELECT子句中出现的字段名必须是分组字段
  3. 如果SELECT子句中出现了嵌套函数,那么该子句中不允许再出现统计函数之外的任何字段

HAVING 子句

HAVING子句是对分组统计函数统计出的结果进行过滤的句子

⑤SELECT *						--查询数据
①FROM 数据来源					--找到数据源
②WHERE 条件判断					--对数据源进行过滤
③GROUP BY 分组字段				--对满足条件的数据分组
④HAVING 对统计函数进行判断		--对分组统计的数据进行过滤
⑥ORDER BY 排序字段 排序方式		--对过滤后的数据进行排序

WHEREHAVING的区别

  • WHEREGROUP BY子句之前执行,HAVINGGROUP BY子句之后执行
  • WHERE中不能有统计函数,HAVING中可以使用统计函数对数据进行过滤

子查询

子查询就是将一个查询的结果作为另一个查询(主查询)的数据来源或者判断条件的查询,子查询需要使用小括号括起来
常见的子查询有

WHERE子查询

DEMO 查询出薪资排名第三的雇员信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

FROM子查询

FROM后面的数据来源可以是数据表,也可以是一个子查询的结果
使用FROM子查询注意

  1. FROM子查询的结果作为主查询的数据来源,子查询结果相当于一张临时数据表
  2. 必须为子查询定义别名(规范,不定义不会报错)
  3. 如果要使用子查询中的字段名应该使用别名.字段名来引用

SELECT子查询

HAVING子查询

EXISTS子查询

EXISTS子查询特征:将主查询中的数据带入到子查询中进行验证,通过返回true,主查询显示该数据,不通过返回false,主查询不显示该数据
NOT EXISTS子查询与EXISTS子查询相反

ROWNUM伪列

ROWNUM是动态的在数据表中生成一列,即一个字段,这列数据不属于数据表是动态生成的且该列数据必须从1开始
DEMO1

SELECT ROWNUM AS rn, empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp;

在这里插入图片描述DEMO2 查询第一条数据

SELECT ROWNUM AS rn, empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp WHERE ROWNUM = 1;

在这里插入图片描述
查询第一条数据的意义在于和DESC共用方便观察数据表

DEMO2 查询第二条数据

SELECT ROWNUM AS rn, empno,ename,job,mgr,hiredate,sal,comm,deptno FROM emp WHERE ROWNUM = 2;

在这里插入图片描述
因为ROWNUM要求该列必须从1开始,因此直接查第二条数据无法完成,需要使用子查询(这是分页查询的基础)
在这里插入图片描述

使用ROWNUM实现分页查询

DEMO

SELECT *
	FROM(
		SELECT ROWNUM AS rn, empno,ename,job,sal,hiredate,mgr,comm,depto
			FROM emp
				WHERE ROWNUM <=10) temp
			WHERE rn >=6;

通过以上代码可以实现查询第6-10条数据,假如我们要求网页中数据每页显示5条,这刚好是第二页的数据
计算当前页数据的ROWNUM公式如下:

起始位置 m = (cp-1)*ls+1
最终数据位置 n = cp*ls
注:cp表示当前页,ls表示每页显示数据量
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hcwdd/article/details/90293354

智能推荐

城市扩张对生境质量影响评价与生态安全格局构建—以黄河流域“几”字弯为例_我黄河流域城市扩张的危害_地理探险家的博客-程序员宅基地

城市扩张对生境质量影响评价与生态安全格局构建—以黄河流域“几”字弯为例。_我黄河流域城市扩张的危害

keil安装 ARM 和 C51-程序员宅基地

Keil v5 C51 MDK包 共存合并方式(简单方便) ...

python儿童入门视频-Python入门视频课程-程序员宅基地

老男孩教育的PYTHON自动化开发课程自2013年第1期到现在已经走到了第12期,2年半的时间里,我们每一期都在对课程细节进行不同程度的优化,课程总时长也从最开始的2个月延长至第12期的五到六月,更新内容足足翻了一倍多,我们培养出来的几百名学员目前已活跃在各大互联网公司的自动化岗位上。然而我们也希望学员在毕业时能获取到更多的知识,进入企业后可以立刻上手进行自动化系统的开发相关工作,或者尝试做一个纯...

Flutter 基础布局Widgets之Expanded详解_widget expanded-程序员宅基地

Expanded概述Expanded是用于展开Row,Column或Flex的子child的Widget。 使用Expanded可以使[Row],[Column]或[Flex]的子项扩展以填充主轴中的可用空间(例如,水平用[Row]或垂直用[Column])。 如果扩展了多个子节点,则根据[flex]因子将可用空间划分为多个子节点。[Expanded]小部件必须是[Row],[Column]或..._widget expanded

HAOI2010最长公共子序列-程序员宅基地

题目描述字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列。令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X的子序列,存在X的一个严格递增下标序列0,i1,…,ik-1>,使得对所有的j=0,1,…,k-1,有xij = yj。例如,X=“ABCBDAB”,Y=“BCDB”是X的一个子序

简单div滚动条_简单的div滚动-程序员宅基地

.parent{ width: 200px; height: 100px; overflow: auto; float: left; margin: 5px; border: none;}.scrollbar{ width: 300px; height: 200px; margin: 0 auto; }.myScrollbar::-webkit-scrollbar { width: 5px; /*滚动_简单的div滚动

随便推点

Ext grid显示内容的字数超过单元格可以显示的字数时,如何让其自动换行-程序员宅基地

4. 当显示内容的字数超过单元格可以显示的字数时,如何让其自动换行(how to wrap text when the length of characters is more than the width of the column):设置这些单元格的所用类的css即可。 如:.x-grid3-cell-inner{white-space:normal;overflow:visible;}需 要

函数指针作为返回值的写法_Bluenapa的博客-程序员宅基地

C语言指向函数的指针承载的信息比较复杂,组织起来要素要写全。根据指向函数的指针的书写语法,下面的代码就是一个返回函数指针的函数:int (*f(void))(int){//f是函数,没有参数,返回指向一个函数的指针;这个被指向的函数有一个int型形参,且返回一个int值 return fun;//fun是个函数名,必须具备一个int形参、返回int值的要求}以下代码可以验证上述函数的正确性:<pre t="code" l="cpp">//#include "stdafx.h"//If the v_函数指针作为返回值

基于matlab的JPEG彩色图像编码解码源码_基于matlab的jpeg编码代码-程序员宅基地

%% 清空环境close all;clc;clear;%% 图像压缩filePath='2.bmp';%被压缩的图像的途径quantizationFactor=0.5;%该变量为量化因子,最小为0.01,最大为255,建议在0.5和3之间,越小质量越好文件越大I=imread(filePath);%读bmp彩色图像FileCode=encode(I,quantizationFactor);%压缩图像%保存文件savePath='save.myjpeg';%文件保存路径fileID_基于matlab的jpeg编码代码

完美解决 sublime text 3 /2不能安装 package control 的问题 手动安装-程序员宅基地

原创博客地址:https://lwxshow.com/post/1816.htmlsublime text 可以说是与eclipse并说全世界目前最好的开发工具了。很多时候,大家在网上搜索sublimetext 3安装package control,显示的99%都是不能用的

php fopen txt,PHP fopen函数读写txt文件实现程序-程序员宅基地

下面我们利用几个实例来总结了利用php fopen函数来实现文件的读写操作,有需要学习的朋友可参考参考.简单的参考fopen函数fopen() 函数打开文件或者 URL.如果打开失败,本函数返回 FALSE.语法fopen(filename,mode,include_path,context)创建一个文件的实例代码如下:if(!file_exists("test.txt")){ //如果文..._php fopen txt

ELK入门——解决:Elasticsearch-head集群健康值:未连接_Netceor的博客-程序员宅基地

在ES-head搭建完成后,页面可以打开,但是遇到了集群健康值未连接的问题我目前知道有两种可能的原因,一个是节点数设置错误,一个是配置问题,因为默认不允许跨域访问,所以需要我们进行设置方法一:节点设置vim /etc/elasticsearch/elasticsearch.ymlcluster.initial_master_nodes: ["node-1", “node-2”] == > cluster.initial_master_nodes: ["node-1"],节点默认是两个