单表查询

select [distint]* 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定

基础查询

select * from emp;

1.查询多个列(控制列)

select 字段名1,字段名2... from 表名;

查询所有列

select * from emp; -- 如果查询所有字段,则可以使用*来替代字段列表。
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp; -- 推荐使用第二种。列出所有列名
  1. 计算列

一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)

select empno,ename,sal,sal*12 from emp;

empno	ename	sal	sal*12
7369 SMITH 800 9600
  1. 起别名:as
select ename as "姓名",job as "工作" from emp;

-- as也可以省略
select ename "姓名",job "工作" from emp; select ename 姓名 ,job 工作 from emp; select ename "from" ,job 工作 from emp; -- 不推荐

  1. 去除重复:distinct
select distinct job as 工作,deptno as 部门编号 from emp ;

条件查询 where

范围查询

算数运算 加减乘除
null的计算

① a.null参与运算时,结果永远为null

select ename,sal,comm,sal*12+comm from emp;

oracle的解决方案 --> 使用 nvl (相当于if)

select ename,sal,comm,sal*12+nvl(comm,0) from emp;

额外:nvl2 (if…else…)

nvl2(a,b,c) 当a=null时候,返回c;否则返回b

select ename,sal,comm,sal*12+nvl2(comm,comm,0) from emp;

mysql的解决方案

ifnull(表达式1,表达式2):

  • 表达式1:哪个字段需要判断是否为null
  • 如果该字段为null后的替换值。
关系运算符

关系运算符 > < >= <= = !=(或<>)

如果是null,则使用is null或is not null.

判断null

② b. 判断null 不能 !=null;而必须使用 is not null /is null

select * from emp where comm=null; -- 错误

select * from emp where comm < 400 or comm IS NULL;

逻辑运算

mysql 中的逻辑运算符 and(或 &&) or(或 ||) not(或 !)

oracle 逻辑运算符 or and not

select * from emp where empno=7788 or empno=7369;

select * from emp where deptno=20 and job ='CLERK';

select * from emp where not ( empno=7788 or empno=7369 );

而 || 被oracle用于字符串拼接

- select 'hello'||'123' from dual ;

BETWEEN ... AND ...

between 小 and 大,(数字和日期)

数字
select * from emp where sal between 2000 and 3000 日期
oracle:日期默认格式 '01-1月-81'(date)
select * from emp where hiredate between '01-1月-81' and '10-11月-81' ; mysql:日期默认格式 'yyyy-MM-dd'(datetime)
select * from emp where hiredate between '1981-1-01' and '1981-11-10';

IN(集合)/not in

select * from emp where comm in (0,300,500);

如果集合有null,可以in, 不能not in

错误示例: where deptno not in (10,20,null)

模糊查询 like

占位符(通配符)

_:单个任意字符

%:多个任意字符 0-N

查询姓名中 第二个字母是M的员工

select * from emp where ename like '_M%' ;

查询姓名长度>=6的员工。

select * from emp where ename like '______%' ;

转义符:

如果要匹配的ename就是A_B,就需要使用转义符

select * from emp where ename like 'A\_B' escape '\' ;

排序查询 order by

order by 排序字段1 排序方式1,  排序字段2 排序方式2

排序字段可以是 字段名|别名|表达式|数字

排序方式:
ASC:升序,默认的。
DESC:降序。 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。

null排序

select * from emp ORDER BY comm asc;

在MySQL中 null最小,升序时 排在最前面

在Oracle中 null最大,升序时 排在最后面

如果排序存在null:在Oracle中Null最大。如果需要null排在最后,使用nulls last ;

…order by common nulls last;

Oracle/Sql Server :从1开始数

MySql:从0开始数

分组查询:group by ... having ...

group by 分组字段 having 筛选组
分组之后查询的字段:分组字段、聚合函数 查询时,不在组函数(多行函数)中的列,必须在group by后面
不能在where中使用组函数;可以在having中使用组函数(多行函数) 查询每个部门的人数:按部门分组
- select deptno, job,count(*) from emp group by deptno,job ; 查询每个部门的人数,只查询人数大于5的组
- select deptno,count(*) from emp group by deptno having count(*)>5 ; 可多个列分组(先按部门分组,再按job分组)
select deptno,job,avg(sal) from emp group by deptno,job;
分析:
select 分组1,分组2 ,组函数() from emp group by 分组1,分组2 ;
  1. where 和 having 的区别?
  • 筛选 行:where
  • 筛选 组:having
    1. where 在分组之前进行限定,如果不满足条件,则不参与分组。

      having在分组之后进行限定,如果不满足结果,则不会被查询出来
    2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。

sql-DQL-单表查询的更多相关文章

  1. 06-查询操作(DQL)-单表查询

    一. 综述   查询操作主要从两个方面来说:单表查询和多表查询. 单表查询包括:简单查询.过滤查询.结果排序.分页查询.聚集函数. 二 . 案例设计   1. 设计产品表(product).包括:主键 ...

  2. sql语句-单表查询

    一:单表查询 CREATE TABLE `Score`( `s_id` ), `c_id` ), `s_score` ), PRIMARY KEY(`s_id`,`c_id`) ); ); ); ); ...

  3. 数据库——SQL数据单表查询

    数据查询   语句格式 SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] … FROM <表或视图名>[,<表或视图名&g ...

  4. (七)MySQL数据操作DQL:单表查询1

    (1)单表查询 1)环境准备 mysql> CREATE TABLE company.employee5( id int primary key AUTO_INCREMENT not null, ...

  5. DQL单表查询

    DQL数据查询语言数据查询关键字:select 对数据库关系表中的数据进行查询 创建数据库创建表格学生表(学号s_no,姓名s_name,班级s_classno,课程s_courseno) 班级表(班 ...

  6. 【T-SQL基础】01.单表查询-几道sql查询题

    概述: 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础 ...

  7. SQL基本查询_单表查询(实验二)

    SQL基本查询_单表查询(实验二) 查询目标表结构及数据 emp empno ename job hiedate sal comn deptno 1007 马明 内勤 1992-6-12 4000 2 ...

  8. springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetomany

    springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetoma ...

  9. sql多表查询(单表查询略过)

    表library: 表borrow: 表reader: 1.等值连接:(常用) 原理:将多张表组合成一个逻辑大表,即字段相加记录相乘(笛卡尔积). 语法:select * from 表A,表B whe ...

  10. SQL数据查询之——单表查询

    一.SQL数据查询的一般格式 数据查询是数据库的核心操作.SQL提供了SELECT语句进行数据查询,其一般格式为: SELECT [ALL | DISTINCT]<目标列表达式>[,< ...

随机推荐

  1. Metalama简介2.利用Aspect在编译时进行消除重复代码

    上文介绍到Aspect是Metalama的核心概念,它本质上是一个编译时的AOP切片.下面我们就来系统说明一下Metalama中的Aspect. Metalama简介1. 不止是一个.NET跨平台的编 ...

  2. fxksmdb.exe 是什么进程?

    今天打开电脑应用进程发现fxksmdb.exe.fxksmpl.exe.fxksmW.exe三个进程,经过查看文件路径发现原来是施乐打印机的驱动程序自带的应用,平时都没注意到这个,这下放心了. 我这里 ...

  3. RESTFul是一种风格

    只要符合RESTFul风格的,都可以叫做使用了RESTFul架构,一般的网站里传数据,都是用的?a=1&b=2...如果是RESTFul风格的话,就会是/a/1/b/2..类似于这样的方式来传 ...

  4. 图解BM(Boyer-Moore)字符串匹配算法+代码实现

    简介 本篇文章主要分为两个大的部分,第一部分通过图解的方式讲解BM算法,第二部分则代码实现一个简易的BM算法. 基本概念 bm是一个字符串匹配算法,有实验统计,该算法是著名kmp算法性能的3-4倍,其 ...

  5. 【Java面试】Zookeeper中的Watch机制的原理?

    一个工作了7年的粉丝,遇到了一个Zookeeper的问题. 因为接触过Zookeeper这个技术,不知道该怎么回答. 我说一个工作了7年的程序员,没有接触过主流技术,这不正常. 于是我问了他工资以后, ...

  6. linux篇-Parse error: syntax error, unexpected ‘new’ (T_NEW) in /usr/local/nginx/html/cacti/lib/adodb

    1首先这是基于lnmp模式进行的 2yum安装 yum -y install httpd mysql mysql-server php php-mysql php-json php-pdo 3lib库 ...

  7. unity---点击事件

    点击事件 点击触发的事件脚本 脚本挂载方式 On Click() 如果点击后触发,调用Button物体下,Button_lick脚本中的func函数/func_text 结果

  8. Hapoop安装学习(第一天)

    学习任务: 1.安装虚拟机 Linux使用版本为Centos7,共安装3台虚拟机,一台主机和两台从机.主机命名为master,两台从机分别命名为s1和s2. master分配磁盘空间30G,s1和s2 ...

  9. 基于.NetCore开发博客项目 StarBlog - (8) 分类层级结构展示

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  10. SQLServer2008中的Merge

    SqlServer2008 +  中的 Merge Merge:  合并   融合 SqlServer2008 中的Merge 用于匹配两种表中的数据,根据源表和目标表中的数据的比较结果对目标表进行对 ...