#DQL语言

##一、基础查询

###1.首先在SQLyog里新建一个查询编辑器,如图:

sql server新建的查询在哪 sqlyog新建查询_sql server新建的查询在哪


以后我们的查询操作就在查询编辑器里完成。

我们基础查询的语法是:select 查询列表 from 表名;
注意点:

①select后面跟的是“查询列表”,意思是说 选择的东西可以有多个,查询列表可以是:表中的字段、常量值、表达式、函数。
②查询的结果是一个虚拟的表格,只是临时存在,并没有真正保存。

###2.不同查询列表
①查询表中的单个字段

假设我们现在要查询“员工表”(employees)中的“姓”(last_name),于是可以这样写,如图:

sql server新建的查询在哪 sqlyog新建查询_MySQL_02


输入查询语句后一定要点左上方的“执行查询”按钮/F9键,执行查询后的效果表如图,即employees表中所有last_name的值都罗列出来了:

sql server新建的查询在哪 sqlyog新建查询_mysql_03

②查询表中的多个字段

假设现在我们要查询“员工表”(employees)表中的“姓”(last_name)和“月薪”(salary)和“邮箱”(email),那么我们就可以这样写,如图:

sql server新建的查询在哪 sqlyog新建查询_MySQL_04


注意一定要把所要执行的查询语句选中再执行,效果表显示如下:

sql server新建的查询在哪 sqlyog新建查询_MySQL_05

③查询表中的所有字段

我们可以把每个字段挨个写上去,但这样显然很麻烦,于是我们可以通过双击字段的方式去间接输入,各字段之间记得加==“,”==,如图:

sql server新建的查询在哪 sqlyog新建查询_mysql_06


可以把光标随意放在语句中后摁F12键使其格式化如图:

sql server新建的查询在哪 sqlyog新建查询_字段_07


上图光标插入后摁F12格式化…

sql server新建的查询在哪 sqlyog新建查询_字段_08


这里提醒一下,可能有同学会问为什么双击后显示的字段多了’ ‘,我们称’ '为着重号,在这里删去也无妨,但我们都知道 存在即合理,那么着重号到底有什么用呢?现在假设在employees表中有一个字段名字叫NAME,其实NAME在SQLyog中也是一个关键字,那于是我们就用着重号来进行区分!将select NAME from employees改为select 'name' from employees就达到区分的效果啦,这一点其实和其他的编译软件差不多,大家理解理解就好啦~通过这种方式可以随意更改表格中各字段依次显示的顺序,还有一种方式可以查询表中的所有字段,如图:

sql server新建的查询在哪 sqlyog新建查询_sql server新建的查询在哪_09


即通过select * from employees;这一查询语句实现,方便快捷,但唯一缺点是无法改变各字段显示的顺序。

④查询表中的常量

需要明确一点,我们在用select去"查询"常量时并不是说从表里查询到相应的常量,而是去显示这个常量!(这一点务必大家明确)比如现在用select 100;语句去执行,如图:

sql server新建的查询在哪 sqlyog新建查询_操作数_10


大家可以看到,100既是字段名,又是对应的常量值。

再比如我们去查询一个字符,这里也提醒一下大家,在MySQL里面不区分字符和字符串,所以我们统统用单引号表示即可,用语句select 'Bill',如图:

sql server新建的查询在哪 sqlyog新建查询_mysql_11

⑤查询表中的表达式

不多说,如图:

sql server新建的查询在哪 sqlyog新建查询_sql server新建的查询在哪_12

⑥查询表中的函数

select 函数名();的语句去显示该函数的返回值,例如:

sql server新建的查询在哪 sqlyog新建查询_操作数_13

###3.库

我们这里做一点小的说明,当我们用select 字段列表 from employees时,必须指明from后面库名!,我们可以看到下图左上方的当前库:

sql server新建的查询在哪 sqlyog新建查询_MySQL_14


显示的库是myemployees即我们当前在该库中进行查询等操作,当然我们也可以在询问窗口中输入语句use myemployees;来选中当前库myemployees,如图:

sql server新建的查询在哪 sqlyog新建查询_mysql_15

###4.起别名
我们在不同的查询对象中最后显示的字段名都是对应的对象名,假如之前的字段名不方便理解或是出现相同的字段名,我们该怎么办?于是接下来我将介绍如何为各字段起别名,主要分为两种方式:

select email as 邮箱,first_name as 名 from employees;select email 邮箱,first_name 名 from employees;

结果一样如下图所示:

sql server新建的查询在哪 sqlyog新建查询_操作数_16

③假如起的别名含特殊符号,如out put,特殊符号为中间的空格,则应添加双引号或单引号,否则会报错,正确写法例如:
select salary 'out put' from employees;

###5.去重

我们有时需要从一堆数据中找出仅仅不同的数据,重复出现的就去掉,这一去重过程可以用语句select distinct 字段 from 库,但注意:不能一下子去重多个字段,select distinct 字段1,字段2 from 库是不对的,例子:查询员工表中涉及到的所有的部门编号 如图:

sql server新建的查询在哪 sqlyog新建查询_字段_17

###6.MySQL中“+”(加号)的作用
我们知道在java中“+”有两种作用,一种是数值运算,另一种是连接两个字符串;

但是,在MySQL中,“+”只作为加法运算符!
那么在MySQL中,"+"到底有哪些用途呢?(以select 操作数1+操作数2 from 库为例)
①当两个操作数都为数值型时,正常做加法运算;
②当其中一方为字符型时,试图将字符型转化为数值型

若转化成功,则继续做加法运算;
若转化失败,则将字符型转化成0,再做加法运算;

③当其中一方为null时,则结果肯定为null;

下面为几个例子:

select '100'+90 from employees

sql server新建的查询在哪 sqlyog新建查询_MySQL_18


select 'Bill'+90 from employees

sql server新建的查询在哪 sqlyog新建查询_操作数_19


select null+90 from employees

sql server新建的查询在哪 sqlyog新建查询_sql server新建的查询在哪_20

###7.用concat进行连接

现在假设有一个案例:

查询员工“名”和“姓”连接成一个字段,并显示为“姓名”.

显然我们用"+"是行不通的,于是在MySQL中我们用函数concat()来进行连接,使用语句select concat(last_name,first_name) as 姓名 from employees;

sql server新建的查询在哪 sqlyog新建查询_mysql_21


PS:null和任何的操作数进行拼接最终结果都为null。

·示例:将“姓”,“名”,“奖金率”拼接起来,中间用逗号隔开,结果用out put显示出来。

~错误语句:select concat(last_name,',',first_name,',',commission_pct) as 'out put' from employees; 结果如图:

sql server新建的查询在哪 sqlyog新建查询_mysql_22

为什么?在于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(这个大家都好理解吧 就不多讲了嘿嘿)