博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySql中的数据查询语言(DQL)一:简单查询、条件查询、排序数据
阅读量:3966 次
发布时间:2019-05-24

本文共 6290 字,大约阅读时间需要 20 分钟。

一、简单查询

语法格式: Select语句后面跟的是字段名称,select是关键字,select和字段名称之间采用空格隔开,from表示将要查询的表,它和字段之间采用空格隔开

select 字段名1,字段名2,字段名3,… from 表名;
提示:
1、任何一条sql语句以“;”结尾。
2、sql语句不区分大小写。
举例:

1、查询员工的姓名和月薪

mysql> select ename,sal from emp;

±-------±--------+
| ename | sal |
±-------±--------+
| SMITH | 800.00 |
| ALLEN | 1600.00 |
| WARD | 1250.00 |
| JONES | 2975.00 |
| MARTIN | 1250.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| SCOTT | 3000.00 |
| KING | 5000.00 |
| TURNER | 1500.00 |
| ADAMS | 1100.00 |
| JAMES | 950.00 |
| FORD | 3000.00 |
| MILLER | 1300.00 |
±-------±--------+
14 rows in set (0.00 sec)

2、查询员工的年薪?(字段可以参与数学运算。)

select ename,sal * 12 from emp;	+--------+----------+	| ename  | sal * 12 |	+--------+----------+	| SMITH  |  9600.00 |	| ALLEN  | 19200.00 |	| WARD   | 15000.00 |	| JONES  | 35700.00 |	| MARTIN | 15000.00 |	| BLAKE  | 34200.00 |	| CLARK  | 29400.00 |	| SCOTT  | 36000.00 |	| KING   | 60000.00 |	| TURNER | 18000.00 |	| ADAMS  | 13200.00 |	| JAMES  | 11400.00 |	| FORD   | 36000.00 |	| MILLER | 15600.00 |	+--------+----------+		给查询结果的列重命名?	select ename,sal * 12 as yearsal from emp;别名中有中文?	select ename,sal * 12 as 年薪 from emp; // 错误	select ename,sal * 12 as '年薪' from emp;	+--------+----------+	| ename  | 年薪        |	+--------+----------+	| SMITH  |  9600.00 |	| ALLEN  | 19200.00 |	| WARD   | 15000.00 |	| JONES  | 35700.00 |	| MARTIN | 15000.00 |	| BLAKE  | 34200.00 |	| CLARK  | 29400.00 |	| SCOTT  | 36000.00 |	| KING   | 60000.00 |	| TURNER | 18000.00 |	| ADAMS  | 13200.00 |	| JAMES  | 11400.00 |	| FORD   | 36000.00 |	| MILLER | 15600.00 |	+--------+----------+	注意:标准sql语句中要求字符串使用单引号括起来。虽然mysql支持双引号,尽量别用。as关键字可以省略	mysql> select empno,ename,sal * 12 yearsal from emp;	+-------+--------+----------+	| empno | ename  | yearsal  |	+-------+--------+----------+	|  7369 | SMITH  |  9600.00 |	|  7499 | ALLEN  | 19200.00 |	|  7521 | WARD   | 15000.00 |	|  7566 | JONES  | 35700.00 |	|  7654 | MARTIN | 15000.00 |	|  7698 | BLAKE  | 34200.00 |	|  7782 | CLARK  | 29400.00 |	|  7788 | SCOTT  | 36000.00 |	|  7839 | KING   | 60000.00 |	|  7844 | TURNER | 18000.00 |	|  7876 | ADAMS  | 13200.00 |	|  7900 | JAMES  | 11400.00 |	|  7902 | FORD   | 36000.00 |	|  7934 | MILLER | 15600.00 |	+-------+--------+----------+

3、查询所有字段?

select * from emp; // 实际开发中不建议使用*,效率较低。

**原因:**采用select * from emp,虽然简单,但是*号不是很明确,建议查询全部字段将相关字段写到select语句的后面,在以后java连接数据库的时候,是需要在java程序中编写SQL语句的,这个时候编写的SQL语句不建议使用select * 这种形式,建议写明字段,这样可读性强.

二、条件查询

1、条件查询需要用到where语句,where必须放到from语句表的后面

在这里插入图片描述

2、语法格式

select             3		字段,字段...	from               1		表名	where              2		条件;

执行顺序:先from,然后where,最后select

3、基本操作符

举例:

查询SMITH的工资?
mysql> select ename,sal from emp where ename = ‘SMITH’;// 字符串使用单引号括起来。
±------±-------+
| ename | sal |
±------±-------+
| SMITH | 800.00 |
±------±-------+
1 row in set (0.00 sec)
注意:mysql里不区分大小写
找出工资高于3000的员工?

select ename,sal from emp where sal > 3000;select ename,sal from emp where sal >= 3000;

找出工资不等于3000的?

select ename,sal from emp where sal <> 3000;select ename,sal from emp where sal != 3000;

4、between … and …操作符

找出工资在1100和3000之间的员工,包括1100和3000?

select ename,sal from emp where sal >= 1100 and sal <= 3000;select ename,sal from emp where sal between 1100 and 3000; // between...and...是闭区间 [1100 ~ 3000]select ename,sal from emp where sal between 3000 and 1100; // 查询不到任何数据
  • between and在使用的时候必须左小右大。
  • between and除了可以使用在数字方面之外,还可以使用在字符串方面。
select ename from emp where ename between 'A' and 'C'; // 左闭右开
+-------+	| ename |	+-------+	| ALLEN |	| BLAKE |	| ADAMS |	+-------+

5、is null

在数据库当中NULL不是一个值,代表什么也没有,为空。空不是一个值,不能用等号衡量。必须使用 is null或者is not null

举例:
找出哪些人津贴为NULL?

select ename,sal,comm from emp where comm is null;

找出哪些人津贴不为NULL?

select ename,sal,comm from emp where comm is not null;

找出哪些人没有津贴?

select ename,sal,comm from emp where comm is null or comm = 0;

6、and:表示并且的含义,表示所有的条件必须满足

找出工作岗位为“clerk‘并且工资大于1000的员工

mysql> select ename,job,sal from emp where job = 'clerk' and sal > 1000;

7、or:只要满足条件即可,相当于包含

找出工作岗位是MANAGER和SALESMAN的员工?

select ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';

and和or联合起来用:找出薪资大于1000的并且部门编号是20或30部门的员工。

select ename,sal,deptno from emp where sal > 1000 and deptno = 20 or deptno = 30; // 错误的
select ename,sal,deptno from emp where sal > 1000 and (deptno = 20 or deptno = 30); // 正确的。
注意:当运算符的优先级不确定的时候加小括号

8、in:in表示包含的意思,完全可以采用or来表示,采用in会更简洁一些

找出工作岗位是MANAGER和SALESMAN的员工?

select ename,job from emp where job = 'SALESMAN' or job = 'MANAGER';select ename,job from emp where job in('SALESMAN', 'MANAGER');select ename,sal,job from emp where sal in (800,5000);// in

后面的值不是区间,是具体的值。

not in: 不在这几个值当中。

select ename,job from emp where sal not in(800, 5000);

9、like

Like可以实现模糊查询,like支持%和下划线匹配(在模糊查询当中,必须掌握两个特殊的符号,一个是%,一个是_)

%代表任意多个字符,_代表任意1个字符
查询姓名以M开头所有的员工

mysql> select ename from emp where ename like 'M%';

查询姓名以N结尾的所的员工

mysql> select ename from emp where ename like '%N';

查询姓名中包含O的所的员工

mysql> select ename from emp where ename like '%O%';

查询姓名中第二个字符为A的所员工

mysql> select ename from emp where ename like '_A%';

找出名字中有下划线的?

select name from t_user where name like '%\_%';

\:转义字符

注意:Like 中的表达式必须放到单引号中|双引号中

三、排序数据

1、单一字段排序

排序采用order by子句 ,order by后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by默认采用升序asc,如果存在where子句那么order by必须放到where语句的后面

2、格式

select 	字段					 	3from	表名						1where	条件						2order by	....						4order by是最后执行的。

举例:

按照工资升序,找出员工名和薪资?
mysql> select ename,sal from emp order by sal;
取得job为MANAGER的员工,照薪水由小到大排序(系统默认由小到大)
mysql> select ename,sal,job from emp where job = ‘manager’ order by sal;

3、手动指定排序顺序

注意:默认是升序。怎么指定升序或者降序呢?

asc表示升序,desc表示降序

select ename , sal from emp order by sal; // 升序select ename , sal from emp order by sal asc; // 升序select ename , sal from emp order by sal desc; // 降序。

4、多个字段排序

按照工资的降序排列,当工资相同的时候再按照名字的升序排列

select ename,sal from emp order by sal desc;select ename,sal from emp order by sal desc , ename asc;

注意:越靠前的字段越能起到主导作用。只有当前面的字段无法完成排序的时候,才会启用后面的字段

如果采用多个字段排序,如果根据第一个字段排序重复了,会根据第二个字段排序
找出工作岗位是SALESMAN的员工,并且要求按照薪资的降序排列

mysql> select ename,job,sal from emp where job = 'salesman' order by sal desc;

5、使用字段的位置来排序

按照薪水升序

mysql> select * from emp order by 6;

±------±-------±----------±-----±-----------±--------±--------±-------+

| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO |
±------±-------±----------±-----±-----------±--------±--------±-------+

注意:不建议使用此种方式,采用数字含义不明确,程序不健壮

转载地址:http://zxuki.baihongyu.com/

你可能感兴趣的文章
No enclosing instance of type Demo06 is accessible.
查看>>
计算机发展中的两大“杀手”
查看>>
《奔跑吧,兄弟》之王祖蓝的"钥匙配箱子"概率统计问题--->>回眸
查看>>
MDK5(Keil for ARM) 工程建立时遇到的问题集锦
查看>>
(正则表达式)邮件地址爬虫
查看>>
c 编译器及#define和typedef
查看>>
Ubuntu下安装GTK+及Glade开发C应用界面
查看>>
Linux下安装eclipse并配置环境变量
查看>>
assertion 'GTK_IS_WIDGET (widget)' failed的解决办法
查看>>
Ubuntu登录管理员账户时,输入密码后一直在登录界面循环
查看>>
Linux下的定时器以及POSIX定时器:timer_settime()
查看>>
POSIX定时器timer_create()以及线程中的gettid() 和pthread_self()
查看>>
c /c++中日期和时间的获取:strftime()函数
查看>>
C语言 回调函数
查看>>
c语言swap(a,b)值交换的4种实现方法
查看>>
c 排序 汇总
查看>>
C 二维数组的动态申请与释放
查看>>
C/C++中产生随机数(rand和srand的用法)
查看>>
c/c++ 中的 struct和typedef struct
查看>>
C++中class类 的 构造函数、析构函数
查看>>