首页 > 数据库 >13-基础SQL-DQL(数据查询语言)-执行顺序(编写顺序和执行顺序)

13-基础SQL-DQL(数据查询语言)-执行顺序(编写顺序和执行顺序)

时间:2023-11-22 10:24:26浏览次数:37  
标签:comment 13 顺序 31 SQL emp 2023 age SELECT

DQL-介绍(常用)

DQL英文全称是Data Query Language(数据查询语言),数据查询语言用来查询数据库中表的记录

查询关键字:SELECT

DQL-语法

DQL-语法(编写顺序和执行顺序)

 

案例:创建一个 emp 员工表,添加一些员工数据

CREATE TABLE emp(
    id int comment "编号",
    workno varchar(10) comment "工号",
    name varchar(10) comment "姓名",
    gender char(1) comment "性别",
    age tinyint unsigned comment "年龄",
    idcard char(18) comment "身份证号",
    workaddress varchar(50) comment "工作地址",
    entrydate date comment "入职时间"
) comment "员工表";
INSERT INTO emp (id,workno,name,gender,age,idcard,workaddress,entrydate)
VALUES    
(1,"1","员工1","男","23","123456789000000000","江西","2023-8-31"),
(2,"2","员工2","男","26","123456789000000001","河北","2023-12-31"),
(3,"3","员工3","女","23","123456789000000002","河北","2023-5-31"),
(4,"4","员工4","女","24","123456789000000003","山西","2023-3-31"),
(5,"5","员工5","男","23","123456789000000000","江西","2023-8-31"),
(6,"6","员工6","男","26","123456789000000001","河北","2023-12-31"),
(7,"7","员工7","女","23","123456789000000002","河北","2023-5-31"),
(8,"8","员工8","女","24","123456789000000003","山西","2023-3-31"),
(9,"9","员工9","男","23","123456789000000000","江西","2023-8-31"),
(10,"10","员工10","男","26","123456789000000001","河北","2023-12-31"),
(11,"11","员工11","女","23","123456789000000002","河北","2023-5-31"),
(12,"12","员工12","女","24","123456789000000003","山西","2023-3-31")

思考问题:

以下两个SQL语句,哪个能执行成功

# 第一个

SELECT age,count(*) from emp where age < 25  GROUP BY age ORDER BY age DESC;

# 第二个

SELECT age,count(*) from emp where age < 25  GROUP BY age ORDER BY id DESC;

第一个执行成功,第二个报错,这是因为 SELECT age,count(*) from emp where age < 25  GROUP BY age 执行得到下面的内容,第二个无法匹配到id字段。

 

重点:那再分析下面两个SQL语句,哪个能执行成功

# 第一个

SELECT age,name from emp where age < 25 ORDER BY age DESC;

# 第二个

SELECT id,name from emp where age < 25 ORDER BY age DESC;

两个都能执行成功,为什么第二个也能执行成功?

按理来说,SELECT id,name from emp where age < 25 执行得到下面的内容,应该无法匹配到age字段。

这是因为emp表内置的字段中存在age字段,才可以对age字段进行排序。我们换一个写法,就执行不成功了

SELECT * FROM
(SELECT id,name from emp where age < 25) c 
ORDER BY c.age DESC;

 

 

 

标签:comment,13,顺序,31,SQL,emp,2023,age,SELECT
From: https://www.cnblogs.com/REN-Murphy/p/17848296.html

相关文章

  • 使用数据库工具连接 mendix默认数据库(HSQL)
    1.先启动数据库cmd下执行(注意路径) : java-cporg.hsqldb.hsqldb-2.7.1.jarorg.hsqldb.server.Server--database.0file:default\default--dbname.0default界面显示  再确认目录下正确产生了.lck文件(锁定文件,用于指示数据库是否正在被其他进程或实例使用)2.......
  • 12-基础SQL-DQL(数据查询语言)-分页查询(LIMIT)
    DQL-介绍(常用)DQL英文全称是DataQueryLanguage(数据查询语言),数据查询语言用来查询数据库中表的记录查询关键字:SELECTDQL-语法DQL-分页查询语法:SELECT字段列表FROM表名LIMIT起始索引,查询记录数; 案例:创建一个emp员工表,添加一些员工数据CREATETABLEemp(......
  • 实例讲解C++连接各种数据库,包含SQL Server、MySQL、Oracle、ACCESS、SQLite 和 Postgr
     C++是一种通用的编程语言,可以使用不同的库和驱动程序来连接各种数据库。以下是一些示例代码,演示如何使用C++连接SQLServer、MySQL、Oracle、ACCESS、SQLite和PostgreSQL、MongoDB数据库。连接SQLServer数据库要使用C++连接SQLServer数据库,可以使用Micro......
  • P1966 [NOIP2013 提高组] 火柴排队
    原题链接题解已经讲的足够好了,我想来补充一点我在思考过程中遇到的“小石子”(此处dalao可以跳过)1.逆序对和线性代数里的逆序数有点不一样,逆序数是指一段排列中所有逆序对的数量(蒟蒻当时卡在这里好久)2.每进行一次交换,最多能消除一个逆序对所以为了消除所有的逆序对,最少交换次......
  • 11.16线性表A,B顺序存储合并
     #include<iostream>#include<cstring>usingnamespacestd;typedefstructf{intdata;f*next;}node,*Node;voidbuild(f*p){intx;while(cin>>x&&x!=-1){f*now=newnode();now->data=x;......
  • 监控MySQL数据库
    监控MySQL数据库想通过grafana简单监控一下MySQL数据库的情况.作为笔记处理.创建用户建议给数据库创建一个监控用户:CREATEUSER'mysqlexporter'@'localhost'IDENTIFIEDBY'Testxxxxxxxx'WITHMAX_USER_CONNECTIONS3;GRANTPROCESS,REPLICATIONCLIENT,SELECTON......
  • mysql c++ create table,insert,select
    CREATETABLE`t1`(`id`bigintunsignedNOTNULLAUTO_INCREMENTprimarykey,`author`varchar(40)NOTNULLDEFAULT'',`comment`varchar(40)NOTNULLDEFAULT'',`content`varchar(40)NOTNULLDEFAULT'',`header`......
  • 13--2. 两数相加
    【首先,题目是给了两个链表,我们可以直接使用哦】我们要自己创建一个链表来存储结果//将第一个节点的值初始化为0,用来指向头指针(意思就是pre后面的那个值才是头指针),返回结果LinkNodepre=newLinkNode(0);//cur是一个可移动的指针,作为储存两个数之和的位置LinkNodecur=......
  • SQL DELETE 语句:删除表中记录的语法和示例,以及 SQL SELECT TOP、LIMIT、FETCH FIRST
    SQLDELETE语句SQLDELETE语句用于删除表中的现有记录。DELETE语法DELETEFROM表名WHERE条件;注意:在删除表中的记录时要小心!请注意DELETE语句中的WHERE子句。WHERE子句指定应删除哪些记录。如果省略WHERE子句,将会删除表中的所有记录!演示数据库以下是示例中使用的Cus......
  • 建立6个“工号”并打乱顺序
    importjava.util.Random;importjava.util.Scanner;publicclasssuijipaiming{publicstaticvoidmain(String[]args){int[]a=newint[6];//1.创建6个动态数组Scannersc=newScanner(System.in);for......