Java教程

数据查询语言DQL

本文主要是介绍数据查询语言DQL,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
  1 SELECT语句
  2 /* select */ ------------------
  3 
  4 select [all|distinct] select_expr from -> where -> group by [合计函数] -> having -> order by -> limit   ;  -- 使用顺序
  5 
  6 a. select_expr
  7 
  8     -- 可以用 * 表示所有字段。
  9 
 10         select * from tb;
 11 
 12     -- 可以使用表达式(计算公式、函数调用、字段也是个表达式)
 13 
 14         select stu, 29+25, now() from tb;
 15 
 16     -- 可以为每个列使用别名。适用于简化列标识,避免多个列标识符重复。
 17 
 18         - 使用 as 关键字,也可省略 as.
 19 
 20         select stu+10 as add10 from tb;
 21 
 22 
 23 
 24 b. from 语句
 25 
 26     用于标识查询来源。
 27 
 28     -- 可以为表起别名。使用as关键字。
 29 
 30         select * from tb1 as tt, tb2 as bb;
 31 
 32     -- from子句后,可以同时出现多个表。
 33 
 34         -- 多个表会横向叠加到一起,而数据会形成一个笛卡尔积。
 35 
 36         select * from tb1, tb2;
 37 
 38 
 39 
 40 c. where 子句
 41 
 42     -- 从from获得的数据源中进行筛选。
 43 
 44     -- 整型1表示真,0表示假。
 45 
 46     -- 表达式由运算符和运算数组成。
 47 
 48         -- 运算数:变量(字段)、值、函数返回值
 49 
 50         -- 运算符:
 51 
 52             =, <=>, <>, !=, <=, <, >=, >, !, &&, ||,
 53 
 54            
 55 
 56       -- 常用的配合有
 57 
 58             in (not) null, 
 59 
 60             (not) like, 
 61 
 62             (not) in, 
 63 
 64             (not) between and,
 65 
 66             is (not),
 67 
 68             and, 
 69 
 70             or, 
 71 
 72             not, xor
 73 
 74             is/is not  加上ture/false/unknown,检验某个值的真假
 75 
 76             <=>与<>功能相同,<=>可用于null比较
 77 
 78 
 79 
 80 
 81 
 82 -- 子查询
 83 
 84 什么是子查询?一个查询嵌套另一个查询
 85 
 86 子查询分1. 标量子查询    (返回一个值)
 87 
 88 标量子查询
 89 
 90 把一个sql执行返回的一个值,作为另一个sql的一个条件
 91 
 92 得到的结果是一行一列,一般出现在where之后
 93 
 94 
 95 
 96 注意点:标量子查询允许使用的符号
 97 
 98 =,!=,> ,>=,=<,<
 99 
100 select   *  from emp   where  dept2=(
101 
102 select  dept1  from  dept where  dept_name="财务"  ) ;
103 
104 
105 
106 -- 列子查询    (返回一个列)
107 
108 定义:返回的是一列值
109 
110 
111 
112 注意点:通常在where 条件的后使用,使用的是in 或not in  ,不允许使用=,>,<
113 
114 
115 
116 select  dept_name  from  dept  where dept1 in ( select  dept2 from   emp group  by  dept2  )
117 
118 
119 
120 -- 行子查询    (返回一行多列)
121 
122 指子查询返回的结果集是一行多列
123 
124 一般出现在where后
125 
126 select  *  from  emp1  where   (age,dept2) = any (select age ,dept2 from  emp1  where   name="牛十");
127 
128 
129 
130 -- 表子查询    (返回一个表) from的后面指子查询返回的结果是一个表(多行多列)select dept2,max(incoming)  from  emp  group  by  dept2
131 
132 
133 
134 select   dept_name ,s.c from  dept  ,
135 
136 ( select dept2,max(incoming) c from  emp  group  by  dept2) s 
137 
138 where  dept.dept1=s.dept2 ;
139 
140 
141 
142 select DISTINCT(dept_name)  from  dept 
143 
144 inner join  (select  dept2,age  from  emp where  dept2=101  )as s  on   dept.dept1=s.dept2 ;
145 
146 
147 
148 
149 
150 
151 
152 GROUP BY语句
153  group by 语句, 分组语句
154     group by 字段/别名 [排序方式]
155     分组后会进行排序。升序:ASC,降序:DESC
156     SELECT column_name, function(column_name)
157     FROM table_name
158     WHERE column_name operator value
159     GROUP BY column_name;
160    以下[合计函数]需配合 group by 使用:
161     count 返回不同的非NULL值数目    count(*)、count(字段)
162     sum 求和
163     max 求最大值
164     min 求最小值
165     avg 求平均值
166     group_concat 返回带有来自一个组的连接的非NULL值的字符串结果。组内字符串连接。
167  -- 示例
168  +----+--------+---------------------+--------+
169 | id | name   | date                | signin |
170 +----+--------+---------------------+--------+
171 |  1 | 小明 | 2022-02-19 15:25:33 |      1 |
172 |  2 | 小王 | 2022-02-19 15:25:47 |      3 |
173 |  3 | 小丽 | 2022-02-19 15:26:02 |      2 |
174 |  4 | 小王 | 2022-02-19 15:26:14 |      4 |
175 |  5 | 小明 | 2022-02-19 15:26:40 |      4 |
176 |  6 | 小明 | 2022-02-19 15:26:54 |      2 |
177 +----+--------+---------------------+--------+
178 -- 将数据表按名字进行分组,并统计每个人有多少条记录
179 SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;
180 +--------+----------+
181 | name   | COUNT(*) |
182 +--------+----------+
183 | 小丽 |        1 |
184 | 小明 |        3 |
185 | 小王 |        2 |
186 +--------+----------+
187 --WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计
188 SELECT name, SUM(signin) as signin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
189 | name   | signin_count |
190 +--------+--------------+
191 | 小丽 |            2 |
192 | 小明 |            7 |
193 | 小王 |            7 |
194 | NULL   |           16 |
195 +--------+--------------+
196 HAVING语句
197 e. having 语句,条件语句   -- 配合  group by 语句使用
198     与 where 功能、用法相同,执行时机不同。
199     where 在开始时执行检测数据,对原数据进行过滤。
200     having 对筛选出的结果再次进行过滤。
201     having 字段必须是查询出来的,where 字段必须是数据表存在的。
202     where 不可以使用字段的别名,having 可以。因为执行WHERE代码时,可能尚未确定列值。
203     where 不可以使用合计函数。一般需用合计函数才会用 having
204     SQL标准要求HAVING必须引用 GROUP BY子句中的列或用于合计函数中的列。
205 -- 示例
206  +----+--------+---------------------+--------+
207 | id | name   | date                | signin |
208 +----+--------+---------------------+--------+
209 |  1 | 小明 | 2022-02-19 15:25:33 |      1 |
210 |  2 | 小王 | 2022-02-19 15:25:47 |      3 |
211 |  3 | 小丽 | 2022-02-19 15:26:02 |      2 |
212 |  4 | 小王 | 2022-02-19 15:26:14 |      4 |
213 |  5 | 小明 | 2022-02-19 15:26:40 |      4 |
214 |  6 | 小明 | 2022-02-19 15:26:54 |      2 |
215 +----+--------+---------------------+--------+
216 -- 将数据表按名字进行分组,并统计每个人有多少条记录
217 SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name having name ='小明'
218 +--------+----------+
219 | name   | COUNT(*) |
220 +--------+----------+
221 | 小明 |        3 |
222 +--------+----------+
223 ORDER BY 语句
224 f. order by 子句,排序子句
225     order by 排序字段/别名 排序方式 [,排序字段/别名 排序方式]...
226     升序:ASC,降序:DESC
227     支持多个字段的排序。
228 -- 示例
229  +----+--------+---------------------+--------+
230 | id | name   | date                | signin |
231 +----+--------+---------------------+--------+
232 |  1 | 小明 | 2022-02-19 15:25:33 |      1 |
233 |  2 | 小王 | 2022-02-19 15:25:47 |      3 |
234 |  3 | 小丽 | 2022-02-19 15:26:02 |      2 |
235 |  4 | 小王 | 2022-02-19 15:26:14 |      4 |
236 |  5 | 小明 | 2022-02-19 15:26:40 |      4 |
237 |  6 | 小明 | 2022-02-19 15:26:54 |      2 |
238 +----+--------+---------------------+--------+
239 SELECT * FROM employee_tbl  ORDER BY ID DESC;
240  +----+--------+---------------------+--------+
241 | id | name   | date                | signin |
242 +----+--------+---------------------+--------+
243 |  6 | 小明 | 2022-02-19 15:26:54 |      2 |
244 |  5 | 小明 | 2022-02-19 15:26:40 |      4 |
245 |  4 | 小王 | 2022-02-19 15:26:14 |      4 |
246 |  3 | 小丽 | 2022-02-19 15:26:02 |      2 |
247 |  2 | 小王 | 2022-02-19 15:25:47 |      3 |
248 |  1 | 小明 | 2022-02-19 15:25:33 |      1 |
249 +----+--------+---------------------+--------+
250 LIMIT语句
251 g. limit 子句,限制结果数量子句
252     仅对处理好的结果进行数量限制。将处理好的结果的看作是一个集合,按照记录出现的顺序,索引从0开始。
253     limit 起始位置, 获取条数
254     省略第一个参数,表示从索引0开始。limit 获取条数
255 -- 示例
256  +----+--------+---------------------+--------+
257 | id | name   | date                | signin |
258 +----+--------+---------------------+--------+
259 |  1 | 小明 | 2022-02-19 15:25:33 |      1 |
260 |  2 | 小王 | 2022-02-19 15:25:47 |      3 |
261 |  3 | 小丽 | 2022-02-19 15:26:02 |      2 |
262 |  4 | 小王 | 2022-02-19 15:26:14 |      4 |
263 |  5 | 小明 | 2022-02-19 15:26:40 |      4 |
264 |  6 | 小明 | 2022-02-19 15:26:54 |      2 |
265 +----+--------+---------------------+--------+
266 SELECT * FROM employee_tbl  LIMIT 1,3;
267  +----+--------+---------------------+--------+
268 | id | name   | date                | signin |
269 +----+--------+---------------------+--------+
270 |  1 | 小明 | 2022-02-19 15:25:33 |      1 |
271 |  2 | 小王 | 2022-02-19 15:25:47 |      3 |
272 |  3 | 小丽 | 2022-02-19 15:26:02 |      2 |
273 +----+--------+---------------------+--------+
274 DISTINCT ALL语句
275 
276 h. distinct, all 选项
277     distinct 去除重复记录
278     默认为 all, 全部记录
279 -- 示例
280  +----+--------+---------------------+--------+
281 | id | name   | date                | signin |
282 +----+--------+---------------------+--------+
283 |  1 | 小明 | 2022-02-19 15:25:33 |      1 |
284 |  2 | 小王 | 2022-02-19 15:25:47 |      3 |
285 |  3 | 小丽 | 2022-02-19 15:26:02 |      2 |
286 |  4 | 小王 | 2022-02-19 15:26:14 |      4 |
287 |  1 | 小明 | 2022-02-19 15:25:33 |      1 |
288 |  1 | 小明 | 2022-02-19 15:25:33 |      1 |
289 +----+--------+---------------------+--------+
290 SELECT distinct * FROM employee_tbl;
291  +----+--------+---------------------+--------+
292 | id | name   | date                | signin |
293 +----+--------+---------------------+--------+
294 |  1 | 小明 | 2022-02-19 15:25:33 |      1 |
295 |  2 | 小王 | 2022-02-19 15:25:47 |      3 |
296 |  3 | 小丽 | 2022-02-19 15:26:02 |      2 |
297 |  4 | 小王 | 2022-02-19 15:26:14 |      4 |
298 +----+--------+---------------------+--------+

 

这篇关于数据查询语言DQL的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!