首页 > 数据库 >数据库基本语法四 数据库查询(DQL)

数据库基本语法四 数据库查询(DQL)

时间:2023-08-27 09:45:12浏览次数:48  
标签:GROUP name -- 数据库 查询 语法 子句 DQL SELECT

数据查询语言(DQL)是SQL语言中的一部分,主要用于查询数据库中的数据。DQL允许用户根据特定的条件来检索表中的数据,并且可以包含一些基本的操作和条件。

语法结构:

SELECT 列名称1 , 列名称2 FROM 表名称;

其中,SELECT指定要检索的列,FROM指定要查询的表,WHERE指定筛选条件。

以下是一些常用的DQL查询语句的示例:

  1. 查询所有数据

如果要查询表中所有的数据,可以使用以下语句:

SELECT * FROM table_name;

这将返回表中的所有行和所有列。

  1. 查询指定列的数据

如果要查询表中某个或某些列的数据,可以使用以下语句:

SELECT column1, column2 FROM table_name;

这将返回表中指定列的所有行。

条件筛选查询

可以使用WHERE子句对查询结果进行条件筛选。WHERE子句允许你指定一个条件,用于从数据库表中过滤出符合条件的记录。同时,还可以与其他DQL语句(如JOIN、GROUP BY等)结合使用,以满足特定的数据查询需求。

条件运算符

  1. 等于(=)

使用"="运算符来比较两个值是否相等。例如,如果要查询名为"John"的用户信息,可以使用以下查询:

SELECT * FROM users WHERE name = 'John';
  1. 不等于(<>或!=)

使用"<>"或"!="运算符来比较两个值是否不相等。例如,如果要查询不是名为"John"的用户信息,可以使用以下查询:

SELECT * FROM users WHERE name <> 'John';
  1. 大于(>)

使用">"运算符来比较一个值是否大于另一个值。例如,如果要查询年龄大于25岁的用户信息,可以使用以下查询:

SELECT * FROM users WHERE age > 25;
  1. 小于(<)

使用"<"运算符来比较一个值是否小于另一个值。例如,如果要查询年龄小于30岁的用户信息,可以使用以下查询:

SELECT * FROM users WHERE age < 30;
  1. 大于等于(>=)

使用">="运算符来比较一个值是否大于或等于另一个值。例如,如果要查询年龄大于或等于25岁的用户信息,可以使用以下查询:

SELECT * FROM users WHERE age >= 25;
  1. 小于等于(<=)

使用"<="运算符来比较一个值是否小于或等于另一个值。例如,如果要查询年龄小于或等于30岁的用户信息,可以使用以下查询:

SELECT * FROM users WHERE age <= 30;
  1. 模糊匹配LIKE

使用LIKE运算符进行模糊匹配。它允许在模式中使用通配符 "%"(匹配任意字符序列)和 "_"(匹配任意单个字符)。例如,如果要查询名字中包含"J"的用户信息,可以使用以下查询:

SELECT * FROM users WHERE name LIKE '%J%';
-- 查询姓名由5个字母构成的学生记录
SELECT * FROM student WHERE stu_name LIKE '_____';

-- 查询姓名由5个字母构成,并且第5个字母为“i”的学生记录
SELECT * FROM student WHERE stu_name LIKE '____i';

--查询姓名以“z”开头的学生记录
SELECT * FROM student WHERE stu_name LIKE 'z%';

-- 查询姓名中第2个字母为“i”的学生记录
SELECT * FROM student WHERE stu_name LIKE'_i%';

-- 查询姓名包含“三”的学生记录
SELECT * FROM student WHERE stu_name LIKE '%三%';
  1. IN

使用IN运算符来检查一个值是否在给定的列表中。例如,如果要查询ID为1、3或5的用户信息,可以使用以下查询:

SELECT * FROM users WHERE id IN (1, 3, 5);
  1. BETWEEN

使用BETWEEN运算符来指定一个值是否在指定的范围之间。它包括范围的最小值和最大值。例如,如果要查询年龄在20到30岁之间的用户信息,可以使用以下查询:

SELECT * FROM users WHERE age BETWEEN 20 AND 30;

 列与表取别名

在DQL中,可以为表和列取别名,以便在查询中引用它们。使用别名可以使SQL语句更易读、易写,也可以在查询中消除歧义。

  1. 为表取别名

可以为表取一个别名,以便在查询中引用该表。例如:

SELECT t.name FROM table1 AS t;

在上述查询中,表table1被赋予了别名"t",然后可以通过"t"来引用该表。

  1. 为列取别名

同样,也可以为列取别名。例如:

SELECT name AS player_name FROM table_name;

在上述查询中,列"name"被赋予了别名"player_name"。在结果集中,"player_name"将代表"table_name"表中的"name"列。

  1. 同时为表和列取别名

还可以同时为表和列取别名。例如:

SELECT t.name AS player_name FROM table1 AS t;

排序

在DQL中,可以通过ORDER BY子句对查询结果进行排序。排序可以按照升序(ASC)或降序(DESC)进行。

语法结构:

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式, 字段2 排序方式2;

其中,排序方式可以是ASC(升序,默认值)或DESC(降序)。

以下是一些排序查询的示例:

  1. 单列排序:

    SELECT * FROM employees ORDER BY last_name ASC; -- 按姓氏升序排序
    SELECT * FROM employees ORDER BY last_name DESC; -- 按姓氏降序排序
  1. 多列排序:

    SELECT * FROM employees ORDER BY last_name ASC, first_name ASC; -- 先按姓氏升序排序,再按名字升序排序
    SELECT * FROM employees ORDER BY last_name DESC, first_name DESC; -- 先按姓氏降序排序,再按名字降序排序
  1. 对聚合结果进行排序:

SELECT COUNT(*) FROM employees GROUP BY department_id ORDER BY COUNT(*) DESC; -- 按部门人数降序排序

聚合函数

运算函数

DQL中的聚合函数是一组用于对查询结果进行统计的函数。常见的聚合函数包括:

  1. COUNT函数:用于计算查询结果中的行数。

    SELECT COUNT(*) FROM table_name; -- 计算表中的行数
    SELECT COUNT(column_name) FROM table_name; -- 计算符合条件的行数
  1. SUM函数:用于计算某个列的总和。

    SELECT SUM(column_name) FROM table_name; -- 计算列的总和
  1. AVG函数:用于计算某个列的平均值。

    SELECT AVG(column_name) FROM table_name; -- 计算列的平均值
  1. MAX函数:用于找出某个列的最大值。

    SELECT MAX(column_name) FROM table_name; -- 找出列的最大值
  1. MIN函数:用于找出某个列的最小值。

    SELECT MIN(column_name) FROM table_name; -- 找出列的最小值

 GROUP BY 查询(分组查询)

GROUP BY子句在DQL中用于根据一个或多个列对查询结果进行分组。它通常与聚合函数一起使用,以便对每个组应用计算并生成汇总数据。

语法如下:

SELECT 列1, 列2, ... FROM 表名 GROUP BY 列1, 列2, ... ;

其中,列1、列2等是要选择的列,表名是要查询的表的名称,GROUP BY子句指定了根据哪些列进行分组。

以下是一些GROUP BY查询的示例:

  1. 根据单个列分组:

SELECT department_id, COUNT(*) FROM employees GROUP BY department_id; -- 按部门分组并计算每个部门的员工数
  1. 根据多个列分组:

SELECT department_id, job_title, COUNT(*) FROM employees GROUP BY department_id, job_title; -- 按部门和职位分组并计算每个部门中每个职位的员工数
  1. 使用聚合函数与GROUP BY结合:

SELECT department_id, AVG(salary) FROM employees GROUP BY department_id; -- 按部门分组并计算每个部门的平均工资

GROUP BY子句还可以与HAVING子句一起使用,以进一步筛选分组结果。HAVING子句允许你指定一个条件,用于在分组之后对分组结果进行筛选。

SELECT department_id, AVG(salary) FROM employees GROUP BY department_id HAVING AVG(salary) > 50000; -- 按部门分组并计算每个部门的平均工资,仅返回平均工资大于50000的部门

HAVING子句

HAVING子句是SQL语句中的一个条件筛选语句,它用于在分组查询(group by)之后进一步筛选满足条件的分组结果。

语法上,HAVING子句位于GROUP BY子句之后,完整的语法如下:

SELECT 列1, 列2, ... FROM 表名 GROUP BY 列1, 列2, ... HAVING 条件;

其中,列1、列2等是要选择的列,表名是要查询的表的名称,GROUP BY子句指定了根据哪些列进行分组,HAVING子句则指定了进一步筛选分组的条件。

HAVING子句可以与聚合函数一起使用,例如COUNT、SUM、AVG等,以便对每个组应用计算并生成满足条件的汇总数据。

以下是一些HAVING子句的示例:

  1. 根据分组后的计数筛选:

SELECT department_id, COUNT(*) FROM employees GROUP BY department_id HAVING COUNT(*) > 10; -- 按部门分组并计算每个部门的员工数,仅返回员工数大于10的部门
  1. 根据聚合函数的计算结果筛选:

SELECT department_id, AVG(salary) FROM employees GROUP BY department_id HAVING AVG(salary) > 50000; -- 按部门分组并计算每个部门的平均工资,仅返回平均工资大于50000的部门

注意事项:

  • HAVING子句只能用于在分组查询(group by)之后进行筛选,不能单独使用。
  • HAVING子句后面的字段必须是分组字段或聚合函数的结果,不能是表中的其他字段。
  • 在使用HAVING子句时,SELECT子句中必须包含一个或多个聚合函数,否则会报错。

 

标签:GROUP,name,--,数据库,查询,语法,子句,DQL,SELECT
From: https://www.cnblogs.com/yund/p/17657040.html

相关文章

  • 数据库的类型
    一说到数据库,大多数人可能像我一样,首先想到的就是MySQL、Oracle这样的关系型数据库。因为我们平时接触的最多,而且大学课程中有关于数据库的,也是以关系型数据库为主的。其实,除了关系型数据库外,还有其他类型的用作数据存储的结构,也可以叫做数据库。有些我们平时也经常用到,有的呢,......
  • 启动mysql数据库时报错unknown variable 'rpl_semi_sync_slave_enabled=1'
    问题描述:启动mysql数据库时报错unknownvariable'rpl_semi_sync_slave_enabled=1'.数据库:mysql5.7.21系统:rhel7.31、异常重现--启动数据库[mysql@mysql-leo-slavedata]$/usr/local/mysql/bin/mysqld_safe--defaults-file=/home/mysql/etc/my.cnf&--告警信息2023-08-......
  • 分布式数据库CAP原理
    看完了阳哥的redis视频课,理解了MySQL和NoSQL的区别,下面来总结一下传统的ACID分别是什么A(Atomicity)原子性C(Consistency)一致性I(Isolation)独立性D(Durability)持久性关系型数据库遵循ACID规则,事务在英文中是transaction,有如下四个特性:1、A(Atomicity)原子性原子性......
  • DQL-练习数据
    createtableemp(idintcomment'编号',worknovarchar(10)comment'工号',namevarchar(10)comment'姓名',gendercharcomment'性别',agetinyintunsignedcomment'年龄',idcardchar(18)......
  • DQL-分页查询
       页数就是里面的那个第几行......
  • sqlserver跨数据库查询
    方法一`execsp_droplinkedsrvloginpms,Nullexecsp_dropserverpmsexecsp_addlinkedserver@server='pms',--被访问的服务器别名@srvproduct='',@provider='SQLOLEDB',@datasrc=''--要访问的服务器execsp_addlinkedsrvlogin'pms�......
  • 时序数据库 TDengine 与创意信息兼容性互认,让你的数据共享方案更丰富
    新型物联网实现良好建设的第一要务就是打破信息孤岛,将数据汇聚在平台统一处理,实现数据共享,放大物联终端的行业价值,实现系统开放性,以此营造丰富的行业应用环境。在此背景下,物联感知平台应运而生,成为推动智慧城市建设,强化物联网感知设施跨行业、跨领域共享的重要支撑平台。近日,涛思......
  • OceanBase通过基表检索数据库中的函数索引
    其实通过dba_indexes这个视图也能检索出来,但是如果通过index_type来过滤性能会极差,实际效率会差很多,可能十几秒中才会出来结果,下面是通过基表视图跳过index_type来检索函数索引。 ......
  • 数据库 自增主键插入数据
    1. 现在报错是因为这个自增主键冲突了:id你先把之前的delete了,该插入的SQL应该是这样,你看看有没有问题INSERTINTO"public"."tmall_aggregate_item"("create_time","last_update_time","color_name","product_id","tenant_id","......
  • mysql 常用脚本语法
    mysql常用脚本语法创建表:CREATETABLEtest_db1.test_table1(idINTauto_incrementNOTNULL,my_namevarchar(100)NOTNULL,memovarchar(100)NULL,CONSTRAINTtest_table1_PKPRIMARYKEY(id))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=ut......