MySql学习笔记(一)之DQL常用查询
MySql学习笔记(一)之DQL常用查询
前言:mysql是中小型的数据库软件,SQL语言分为DDL,DCL,DML,DQL四种,在这里重点讲解DQL的单表查询。
正文:在学习mysql单表查询之前,我们先做一些准备工作。
需要安装的软件如下:
1.mysql,版本可以选择5.1或者5.5,安装过程可以参考博客:http://www.cnblogs.com/ixan/p/7341637.html
2.mysql图形化管理软件:Navicate,sqlyog(二选一,推荐使用sqlyog)。
本文以 mysql 6.0,图形管理软件 sqlyog 为例,讲解DQL单表查询。
1.首先需要开启mysql服务,可以有以下两种方式开启:
1)方式一:右键点击计算机→管理→服务→可以找到MySQL服务开启或停止。

2).方式二:在dos窗口开启,输入命令 net start mysql开启mysql服务,输入 net stop mysql关闭mysql服务

若不能开启,请使用管理员方式运行cmd,在输入以上命令!
2.登录mysql账户((mysql -h localhost -u root -p),这里-h可以不写,默认本地主机,-u 后面跟的是用户,-p下面输入的是自己设置的mysql密码)!

3.准备数据(以下是本人建立的员工表和测试的数据),建表语句如下:
CREATE TABLE emp(
empno INT, #-- 员工编号
ename VARCHAR(50), #-- 姓名
job VARCHAR(50), #-- 职位
mgr INT, #-- 上级员工编号
hiredate DATE,#-- 入职日期
sal DECIMAL(7,2),#--工资
comm decimal(7,2),#-- 奖金
deptno INT #-- 部门编号
) ;
在dos窗口效果如下:(其中'#'在mysql中是声明注释,不执行)

我们可以查看一下表结构:

OK,表已经建好了,我们开始插入数据:
INSERT INTO emp values(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp values(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp values(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp values(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp values(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp values(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp values(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp values(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp values(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO emp values(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO emp values(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
INSERT INTO emp values(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO emp values(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO emp values(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);
由于数据在mysql中显示不太美观,在图形化管理软件sqlyog中可以看一下:

OK,至此我们前期准备工作完成,下面我们开始讲解单表查询:
4.结合案例讲解单表查询
01.查询工资(sal)大于1200的员工姓名和工资 (考查简单查询和比较运算符)
#标准代码
select ename,sal from emp where sal>1200;
#其他写法
select ename,sal from emp where not sal<=1200;
效果如下:

02.查询员工号(empno)为含有76的员工的姓名和部门号(deptno) (考查模糊查询like,%代表零个或多个任意字符)
#标准写法
select empno,ename,deptno from emp where empno like '%76%';
这里我们为了看效果,增加显示empno 这一列,效果如下:

03.选择工资不在1200到2400的员工的姓名和工资 (考查between... and...,or,其中between... and...表示在某一区间的值(包含头和尾),or表示多个条件任一成立)
#推荐写法
select ename,sal from emp where not sal between 1200 and 2400;
#其他写法
select ename,sal from emp where sal <1200 or sal>2400;
效果如下:

04.选择雇用时间在1981-02-01到1981-05-01之间的员工姓名(ename),deptno和雇用时间(hiredate) (考查between... and...)
#推荐写法
select ename,deptno,hiredate from emp where hiredate between '1981-02-01' and '1981-05-01' ;
#其他写法
select ename,deptno,hiredate from emp where hiredate >= '1981-02-01' and hiredate<='1981-05-01';
效果如下:

05.选择在20或50号部门工作的员工姓名和部门号(deptno) (考查:in,显示在in列表中的值,例:in(100,200),其实in常用于替换多个or的形式)
#标准写法
select ename,deptno from emp where deptno in (20,50);
#其他写法
select ename,deptno from emp where deptno=20 or deptno=50;
效果如下:

06.选择在1981年雇用的员工的姓名和雇用时间(hiredate) (考查between and,order by)(order by 后面跟排序字段,asc表示升序(默认),desc表示降序)
#推荐写法
select ename,hiredate from emp where hiredate
between '1981-01-01' and '1981-12-31' order by hiredate;
#不推荐写法
select ename,hiredate from emp where hiredate like '1981%'
order by hiredate;
效果如下:

07.选择公司中没有管理者(mgr)的员工姓名及deptno (考查:null,判断为空是 is null ,判断不为空是 is not null)
#推荐写法
select ename,deptno, mgr from emp where mgr is null;
注意:null表示空状态
效果如下:

08.选择公司中有奖金的员工姓名,工资和奖金级别(comm) (考查:比较运算符,null)
#推荐写法
select ename,sal,comm from emp where comm>0;
#其他写法
select ename,sal,comm from emp where comm is not null and comm>0;
#不推荐写法
select ename,sal,comm from emp where comm is not null;
效果如下:

09.选择员工姓名的第三个字母是a的员工姓名(mysql不区分大小写) (考查:模糊查询like ,"_"代表一个字符)
#标准写法
select ename from emp where ename like '__a%';
效果如下:

10.选择姓名中有字母a和e的员工姓名 (考查:模糊查询like,"%")
#标准写法
select ename from emp where ename like '%a%' and ename like '%e%';
效果如下:

11.查询员工号(empno),姓名,工资,以及工资提高百分之20%后的结果(new salary) (考查对查询结果进行运算,as 列别名)
#标准写法
select empno,ename,sal,sal*1.2 as 'new sal' from emp;
注意:查询结果是可以直接使用"+-*/"来进行运算的,as可以将查询结果改名
效果如下:

12.将员工的姓名按首字母排序 (考查order by,可以操作数值类型,日期类型,以及字母排序)
#标准写法
select ename from emp order by ename;
注意:order by 一般不对汉字排序
效果如下:

13.查询公司员工工资的最大值,最小值,平均值,总和 (考查聚合函数:max(某列),min(某列),avg(某列),sum(某列))
#标准写法
select max(sal),min(sal),avg(sal),sum(sal) from emp;
效果如下:

14.查询各deptno的员工工资的最大值,最小值,平均值,总和 (考查聚合函数和分组,group by表示按类别分组)
#标准写法:
select max(sal),min(sal),avg(sal),sum(sal),deptno from emp
group by deptno;
效果如下:

15.查询各个deptno的员工人数 (考查聚合函数count(*):统计指定列不为NULL的记录行数,分组group by)
#标准写法
select deptno,count(*) from emp group by deptno;
注意:count(*)统计某一列记录时,一般不建议填写具体列名,可能会影响结果,若有特殊要求可填写具体列名
效果如下:

16.查询员工最高工资和最低工资的差距 (考查聚合函数,列别名)
#标准写法
select max(sal),min(sal),max(sal)-min(sal) as '差距' from emp;
效果如下:

17.按员工编号升序排列不在10号部门工作的员工信息 (考查比较运算符"!="和排序 order by )
#标准写法:
select * from emp
where deptno !=10
order by empno asc;
效果如下:

18.查询姓名第二个字母不是”A”且薪水大于1200元的员工信息,按薪水降序排列 (考查逻辑运算符,模糊查询 ,比较运算符,排序)
#标准代码
select * from emp
where ename not like '_A%' and sal>1200
order by sal;
效果如下:

19.求每个部门的平均薪水 (考查聚合函数,分组)
#标准代码
select deptno,avg(sal) from emp
group by deptno;
效果如下:

20.求各个部门的最高薪水 (考查聚合函数,分组)
#标准代码
select deptno,max(sal) from emp
group by deptno;
效果如下:

21.求每个部门每个岗位的最高薪水 (考查聚合函数,多列分组(先以第一个分组条件分组,当第一个分组条件相同时,再以第二个分组条件分组))
#标准代码
select deptno,job,max(sal) from emp
group by deptno,job;
效果如下:

22.求平均薪水大于2000的部门编号 (考查聚合函数,别名,分组,having)
#标准代码
select deptno,avg(sal) as avg from emp
group by deptno
having avg>2000;
注意:1).对于"分组"查询的结果,只能包含:(1).分组列;(2).聚合列。不要包含其他列,无意义。
2).分组语句中可以使用条件,也可以对结果排序,整个语法:
select ... from ... where ... group by ... order by ....;
执行顺序:
(1).from (2).where (3).group by (4).聚合函数 (5).select (6).order by
3)having子句:对"聚合函数"的结果进行筛选
效果如下:

23.求最高薪水的员工信息 (可能考查查询嵌套,还请大神们指教啊!!!)
#嘿嘿嘿,能力有限,这是我的写法,还请大神们指教
select * from emp
where sal=(select max(sal) from emp);
效果如下:

24.求多于平均薪水的员工信息 (可能考查查询嵌套,大神们指教下!!!)
#个人写法...
select * from emp
where sal>(select avg(sal) from emp);
效果如下:

OK,至此mysql单表查询案例就先到这了,由于小弟是初学者!文中有任何问题,还请诸位大神指教!!!
MySql学习笔记(一)之DQL常用查询的更多相关文章
- MySQL学习笔记(五)—— 子查询及联结
子查询: 子查询,即嵌套在其他查询中的查询.例如我们有这样几个表,顾客表,订单表,商品表,我们想知道有哪些客户买了商品A,那么我们就需要先查看哪些订单里包含了商品A,然后根据订单查出是哪些客户. my ...
- MySQL学习笔记(一):查询
查询实例: 1.创建数据库并使用: create database school; use school; 2.创建表并插入内容: create table student( Sno char(9) ...
- Mysql学习笔记(002)-基础查询
基础查询 # 进阶1:基础查询 /* 语法: select 查询列表 from 表名: 类似于:system.out.println(打印东西); 特点: 1.查询列表可以是:表中的字段,常量值,表达 ...
- Mysql学习笔记(五)数据查询之测试sql部分。
正文之前,介绍mysql一些很有趣的命令. 快速的创建表,并填充表数据. create table test like 已经有的表名: inset into test select * from f ...
- MySQL学习笔记(十二)__连接查询(一)
连接查询含义:又称多表查询,当查询的字段来自多个表时,就会用到连接查询 笛卡尔乘积现象:表1 有 m 行,表2 有 n 行,结果 = m*n 行发生原因:没有有效的连接条件如何避免:添加有效的连接条件 ...
- Mysql学习笔记(004)- 条件查询
条件查询 #进阶2:条件查询 /* 语法: select 查询列表③ from 表名① where 条件筛选② 分类: 一.按条件表达式筛选 条件运算符:> < = != <> ...
- MYSQL学习笔记 (五)常用的聚合函数
1.COUNT(e1) 语法:COUNT(e1) 参数:e1为一个表达式,可以是任意的数据类型 返回:返回数值型数据 作用:返回e1指定列不为空的记录总数 例子: 1)单独使用
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
- MySQL学习笔记一
MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...
随机推荐
- Windows server 2016 / Windows 10关于域管理员帐号权限不足的问题
今天在测试windows server 2016的域创建时,当安装结束之后,发现使用Administrator用户进行操作时,被提示了权限不足这个问题.于是我在百度上查找了一番之后,找到了解决方法. ...
- Java KMP算法代码
1. KMP 算法(字符串匹配算法)较 BF(朴素的字符串匹配)算法有哪些改进 1) 在主串和子串匹配的过程中,主串不再回退,只改变子串的比较位置. 2) 为子串生成对应的next数组,每次匹配失败, ...
- 扩展欧几里得原理的应用:POJ1061青蛙的约会
/* POJ 1061: 青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 123709 Accepted: 26395 ...
- Java中JNI的使用详解第四篇:C/C++中创建Java对象和String字符串对象及对字符串的操作方法
首先来看一下C/C++中怎么创建Java对象:在JNIEnv中有两种方法是用来创建Java对象的: 第一种方法: jobject NewObject(jclass clazz , jmethodI ...
- bzoj1051题解
[题意分析] 给你一张有向图,求有多少个点,满足以其他任意一点为起点都能到达该点. [解题思路] 如果这张有向图不连通,则一定没有点能被其他所有点到达,答案为0. 然后先用tarjan缩一波强连通分量 ...
- 基本算数定理快速求约数个数——lightoj1208
#include<bits/stdc++.h> using namespace std; #define ll long long #define maxn 1000005 bool vi ...
- jQuery 基本选择器
1 基本选择器 $(‘#id属性值’) ----------->document.getElementById() $(‘tag标签名称’)----------->document.ge ...
- (转)coures包下载和安装 可解决报错ImportError: No module named '_curses'
原创文章,转载请注明出处. coures curses 库 ( ncurses )提供了控制字符屏幕的独立于终端的方法.curses 是大多数类似于 UNIX 的系统(包括Linux)的标准部分,而且 ...
- jwt、oauth2和oidc等认证授权技术的理解
前言 jwt.oauth2.oidc等,都是和认证授权相关的规范或者解决方案,因此要理解他们,就需要从业务场景的适用性一步步的分析和认识. 一.认证授权业务场景理解 就个人目前的理解来看,一个好的软件 ...
- 【POJ】3278 Catch That Cow
题目链接:http://poj.org/problem?id=3278 题意:有一头奶牛跑到了K的位置,农夫在N的位置,求最短抓到奶牛的时间. 农夫有两种移动方式. 1.步行:一分钟内从x->x ...