#DQL语言
##一、基础查询
###1.首先在SQLyog里新建一个查询编辑器,如图:
以后我们的查询操作就在查询编辑器里完成。
我们基础查询的语法是:select 查询列表 from 表名;
注意点:
①select后面跟的是“查询列表”,意思是说 选择的东西可以有多个,查询列表可以是:表中的字段、常量值、表达式、函数。
②查询的结果是一个虚拟的表格,只是临时存在,并没有真正保存。
###2.不同查询列表
①查询表中的单个字段
假设我们现在要查询“员工表”(employees)中的“姓”(last_name),于是可以这样写,如图:
输入查询语句后一定要点左上方的“执行查询”按钮/F9键,执行查询后的效果表如图,即employees表中所有last_name的值都罗列出来了:
②查询表中的多个字段
假设现在我们要查询“员工表”(employees)表中的“姓”(last_name)和“月薪”(salary)和“邮箱”(email),那么我们就可以这样写,如图:
注意一定要把所要执行的查询语句选中再执行,效果表显示如下:
③查询表中的所有字段
我们可以把每个字段挨个写上去,但这样显然很麻烦,于是我们可以通过双击字段的方式去间接输入,各字段之间记得加==“,”==,如图:
可以把光标随意放在语句中后摁F12键使其格式化如图:
上图光标插入后摁F12格式化…
这里提醒一下,可能有同学会问为什么双击后显示的字段多了’ ‘,我们称’ '为着重号,在这里删去也无妨,但我们都知道 存在即合理,那么着重号到底有什么用呢?现在假设在employees表中有一个字段名字叫NAME,其实NAME在SQLyog中也是一个关键字,那于是我们就用着重号来进行区分!将select NAME from employees
改为select 'name' from employees
就达到区分的效果啦,这一点其实和其他的编译软件差不多,大家理解理解就好啦~通过这种方式可以随意更改表格中各字段依次显示的顺序,还有一种方式可以查询表中的所有字段,如图:
即通过select * from employees;
这一查询语句实现,方便快捷,但唯一缺点是无法改变各字段显示的顺序。
④查询表中的常量
需要明确一点,我们在用select去"查询"常量时并不是说从表里查询到相应的常量,而是去显示这个常量!(这一点务必大家明确)比如现在用select 100;
语句去执行,如图:
大家可以看到,100既是字段名,又是对应的常量值。
再比如我们去查询一个字符,这里也提醒一下大家,在MySQL里面不区分字符和字符串,所以我们统统用单引号表示即可,用语句select 'Bill'
,如图:
⑤查询表中的表达式
不多说,如图:
⑥查询表中的函数
用select 函数名();
的语句去显示该函数的返回值,例如:
###3.库
我们这里做一点小的说明,当我们用select 字段列表 from employees
时,必须指明from后面库名!,我们可以看到下图左上方的当前库:
显示的库是myemployees即我们当前在该库中进行查询等操作,当然我们也可以在询问窗口中输入语句use myemployees;
来选中当前库myemployees,如图:
###4.起别名
我们在不同的查询对象中最后显示的字段名都是对应的对象名,假如之前的字段名不方便理解或是出现相同的字段名,我们该怎么办?于是接下来我将介绍如何为各字段起别名,主要分为两种方式:
①select email as 邮箱,first_name as 名 from employees;
②select email 邮箱,first_name 名 from employees;
结果一样如下图所示:
③假如起的别名含特殊符号,如out put,特殊符号为中间的空格,则应添加双引号或单引号,否则会报错,正确写法例如:select salary 'out put' from employees;
###5.去重
我们有时需要从一堆数据中找出仅仅不同的数据,重复出现的就去掉,这一去重过程可以用语句select distinct 字段 from 库
,但注意:不能一下子去重多个字段,即select distinct 字段1,字段2 from 库
是不对的,例子:查询员工表中涉及到的所有的部门编号 如图:
###6.MySQL中“+”(加号)的作用
我们知道在java中“+”有两种作用,一种是数值运算,另一种是连接两个字符串;
但是,在MySQL中,“+”只作为加法运算符!
那么在MySQL中,"+"到底有哪些用途呢?(以select 操作数1+操作数2 from 库
为例)
①当两个操作数都为数值型时,正常做加法运算;
②当其中一方为字符型时,试图将字符型转化为数值型
若转化成功,则继续做加法运算;
若转化失败,则将字符型转化成0,再做加法运算;
③当其中一方为null时,则结果肯定为null;
下面为几个例子:
select '100'+90 from employees
select 'Bill'+90 from employees
select null+90 from employees
###7.用concat进行连接
现在假设有一个案例:
查询员工“名”和“姓”连接成一个字段,并显示为“姓名”.
显然我们用"+"是行不通的,于是在MySQL中我们用函数concat()来进行连接,使用语句select concat(last_name,first_name) as 姓名 from employees;
PS:null和任何的操作数进行拼接最终结果都为null。
·示例:将“姓”,“名”,“奖金率”拼接起来,中间用逗号隔开,结果用out put显示出来。
~错误语句:select concat(last_name,',',first_name,',',commission_pct) as 'out put' from employees;
结果如图:
为什么?在于commission_pct(奖金率)中含有null,而null和任何的操作数进行拼接最终结果都为null。
解决方案:使用IFNULL(expr1,expr2)函数对expr1(参数1)进行判断,若为null,则返回expr2(参数2自行设定)。于是…
~正确语句:select concat(last_name,',',first_name,',',IFNULL(commission_pct,0)) as 'out put' from employees;
(即有奖金率的就正常返回该奖金率,没有的就返回0)
再比如“年薪”怎么表示?
我们知道年薪=月薪12(1+奖金率)
所以可以用语句:SELECT salary*12*(1+IFNULL(commission_pct,0));
<<补充一个ISNULL(参数)函数,当参数为null值时返回1,否则返回0(这个大家都好理解吧 就不多讲了嘿嘿)
以上就是基础查询的内容,下一节将介绍条件查询!
SELECT salary*12*(1+IFNULL(commission_pct,0));
<<补充一个ISNULL(参数)函数,当参数为null值时返回1,否则返回0(这个大家都好理解吧 就不多讲了嘿嘿)