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单表查询案例就先到这了,由于小弟是初学者!文中有任何问题,还请诸位大神指教!!!

时间: 2024-10-12 13:01:59

MySql学习笔记(一)之DQL常用查询的相关文章

MySQL学习笔记(五)—— 子查询及联结

子查询: 子查询,即嵌套在其他查询中的查询.例如我们有这样几个表,顾客表,订单表,商品表,我们想知道有哪些客户买了商品A,那么我们就需要先查看哪些订单里包含了商品A,然后根据订单查出是哪些客户. mysql> select cust_id from orders where order_num in (select order_num from orderitems where prod_id = '1'); +---------+ | cust_id | +---------+ |    10

mysql学习笔记之十一(常用函数)

能运行在多个系统上的代码具有可移植性,在数据库软件中,多数sql语句时可移植的,可移植性比较强:而函数的移植性不强,主要是由于各种数据库软件都支持自己所特有的函数.因此许多sql用户不认同使用数据库软件所特有的的函数 字符串函数 concat(str1,...,strn) : 连接n个字符串为一个完整的字符串 insert(str,x,y,instr) : 将字符串str从第x位置开始,y个字符长的子串替换为instr lower(str) : 所有字符变为小写 upper(str) :所有字符

MYSQL学习笔记 (五)常用的聚合函数

1.COUNT(e1) 语法:COUNT(e1) 参数:e1为一个表达式,可以是任意的数据类型 返回:返回数值型数据 作用:返回e1指定列不为空的记录总数 例子: 1)单独使用 2)与group by搭配使用 2. 语法:SUM(e1) 参数:e1为类型为数值型的表达式 返回:返回数值型数据 作用:对e1指定的列进行求和计算   例子: 1)单独使用 2)与group by联合使用 3.MIN(e1).MAX(e1) 语法:MIN(e1).MAX(e1) 参数:e1为一个字符型.日期型或数值类型

MySQL学习笔记-子查询和连接

MySQL学习笔记-子查询和连接 使客户端进入gbk编码方式显示: mysql> SET NAMES gbk; 1.子查询 子查询的定义: 子查询(Subquery)是指出现在其他SQL语句内的SELECT子句. 例如:  SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中SELECT * FROM t1 称为Outer Query / Outer Statement (外部查询) SELECT col2 FROM t2 , 被称为Su

Mysql学习笔记(三)对表数据的增删改查。

写在前面:(一些牢骚,可以直接跳到分割线后) 太过敏感的人不会快乐,不幸的是我正是这种性格的人. 从培训机构毕业后,迫于经济方面的压力,和当时的班里的一个同学住在了一起,我们在一个公司上班.谁知道这都是不开心生活的源头,从每天早晨开始心情就很糟糕.他是个脾气很慢的人,我是个急脾气,特别是在早上上班的时候.由此种种吧,实在是不胜枚举.算了,还是不说了,太痛苦了,我不太喜欢说别人的坏话.我是学心理学的,已经用各种方法去安慰自己,但是都不太奏效. 回想以往和朋友的交往中,我虽然不算十分合群的人,但绝对

MySQL学习笔记之五 有关数据表操作

MySQL在创建表的时候,创建一个.frm文件保存表和列定义.索引存储在一个有.MYI(MYindex)扩展名的文件并且数据存储在有.MYD(MYData)扩展名的文件中.   一.用SHOW/ DESCRIBE语句显示数据表的信息 语法: SHOW TABLES [FROM db_name] [LIKE wild] or SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild] or SHOW INDEX FROM tbl_name [FROM

Mysql学习笔记(六)增删改查

原文:Mysql学习笔记(六)增删改查 PS:数据库最基本的操作就是增删改查了... 学习内容: 数据库的增删改查 1.增...其实就是向数据库中插入数据.. 插入语句 insert into table_name values("要插入的数据"); 比如说,我们先创建一个宠物表,用来记录宠物的基本信息以及所有者... create table pet ( name varchar(20), owner varchar(20), species varchar(20), sex cha

MySql学习笔记(转载)

/* 启动MySQL */net start mysql /* 连接与断开服务器 */mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */mysqld --skip-grant-tables-- 修改root密码密码加密函数password()update mysql.user set password=password('root'); SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- /* 数据库操

MySQL学习笔记10(MySQL函数)

MySQL学习笔记10 MySQL函数 MySQL数据库中提供了很丰富的函数.MySQL函数包括数学函数.字符串函数.日期和时间函数.条件判断函数.系统信息函数.加密函数.格式化函数等.通过这些函数,可以简化用户的操作.SELECT语句及其条件表达式都可以使用这些函数.同时,INSERT.UPDATE.DELECT语句及其条件表达式也可以使用这些函数. 1:数学函数 数学函数是M有SQL中常用的一类函数.主要用于处理数字,包括整型.浮点数等.数学函数包括绝对值函数.正弦函数.余弦函数.获取随机数