第二章 简单的select查询语句

1.select查询语句基本语法
至少要用到两个关键字:
1)select 用来指定查询的字段、内容
2)from 用来指定从哪张表查询
最基本的语法:select 字段 from 表名;
三种不同的表现形式:
1)查询某张表中特定的某一个字段
select 字段名 from 表名;
例如:
查询所有员工的id?
select id from s_emp;
2)查询某张表中多个字段?
select 字段名1,字段名2,字段名3......
from 表名;
注意:符号一定要使用英文的符号
例如:
查询所有员工的id、last_name?
select id,last_name
from s_emp;
建议:每一个关键字占用一行位置。

每一次select查询结果都相当于是一张表。
3)查询某张表中的全部字段
a)将表中的所有字段名全部列出来
b)使用通配符*符号

例如:查询部门表中全部字段?
select id,name,region_id
from s_dept;

等同于:
select *
from s_dept;
注意:*只在学习、练习、测试的时候使用。
在项目开发的时候要把全部的字段都列出来。
运行过程:
a)直接定义字段名查询
直接根据给定的字段名查询字段值
b)使用*通配
先查询该张表中有哪些字段?
再根据查询的结果去取对应的字段值。

在真正项目开发时,sql命令不需要每次都
手敲。我们可以直接把一些常用的sql命令
预定义到程序中。然后每次接收到请求之后,
直接去调用保存好的sql命令就可以了。
sql命令只需要写一次。
select password from customer
where username = ?;

distinct关键字:
作用:消除重复值。
位置:放在select关键字后面
例如:
查询所有的部门名称?
select name
from s_dept;
查询公司里有哪些种类的部门?
select distinct name
from s_dept;

2.算数运算
查询的过程中,可以对查询结果进行算数运算。
并不是真正改变表中的数据值。

1)数值类型运算
包含 加减乘除
+ - * /
例如:
查询员工12个月的工资总和?
select salary*12
from s_emp;

练习:
每个员工月薪涨200元,
年底还有500元的年终奖。
一年给员工发14个月工资。
查询所有员工一年的总收入?
select (salary+200)*14+500
from s_emp;

2)日期类型运算
只有加法和减法。
加法代表从指定日期向未来数几天。
减法代表从指定日期向过去数几天。

练习:
查询所有员工的入职时间的前三天?
select start_date-3
from s_emp;

3.处理空值
查询所有员工的id、提成?
select id,commission_pct
from s_emp;

查询所有员工的id、工资+提成的总和?
select id,salary+commission_pct
from s_emp;

处理空值:nvl函数
语法:nvl(可能出现空值的字段,默认值)
nvl(commission_pct,0)

select id,salary+nvl(commission_pct,0)
from s_emp;

4.字符串拼接
查询所有员工的全名?
全名 = 姓 + 名
first_name + last_name
select first_name,last_name
from s_emp;

select first_name||last_name
from s_emp;
拼接字符串:使用||符号

练习:
查询所有员工的全名
要求姓氏和名字之间使用"-"分割?
select first_name||'-'||last_name
from s_emp;

concat函数
concat(字符串1,字符串2)

5.给查询结果取别名
每一次select查询结果

查询所有员工的12个月总收入?
要求显示结果中的字段名为Year_Sal?
select id,salary*12 Year_Sal
from s_emp;

四种方式:
1)select 字段 别名 from s_emp;
2)select 字段 as 别名 from s_emp;
3)select 字段 "别名" from s_emp;
4)select 字段 as "别名" from s_emp;

第一种和第二种没区别。
第一种和第三种的区别:
查询结果的字段名默认全部都是大写。
加了双引号就会按照字符串中的内容原样输出。
SQL:select id,salary*12 "Year_Sal"
from s_emp;

6.设置会话中查询结果显示格式
select first_name,last_name
from s_emp;

column
可以简写为col

语法:column/col 要修改的字段 format 格式;
例如:把last_name显示结果修改为15个字符长?
column last_name format a15;
a:代表要处理的是字符类型 a只能处理字符类型
15:代表要显示的长度