第03章_基本的SELECT语句(Chapter 03_ Basic select statement)

# 1.SQL的分类
/*
DDL:数据定义语言。CREATE\ALTER\DROP\RENAME\TRUNCATE

DML:数据操作语言。INSERT\DELETE\UPDATE\SELECT

DCL:数据控制语言。COMMIT\ROLLBACK\SAVEPOINT\GRANT\REVOKE
*/

#2.导入现有的数据表、表的数据。
/*
方式1:source 文件的全路径名
举例:source E:\BaiduNetdiskDownload\atguigudb.sql;

方式2:基于具体的图形化界面的工具可以导入数据
比如:SQLyog中,选择“工具”--“执行sql脚本”--选中xxx.sql即可。
*/
SELECT * FROM employees;

# 1. 最基本的SELECT语句: SELECT 字段1,字段2,… FROM 表名
SELECT 1+1,3*2;
#DUAL:伪表
SELECT 1+1,3*2 
FROM DUAL; 

# *:表中的所有的字段(或列)
SELECT * FROM employees;
SELECT employee_id,last_name,salary
FROM employees;

# 2.列的别名
# as:全称为alias(意为别名),可以省略
# 还可以,列的别名用一对双引号引起来,不要使用单引号。
SELECT employee_id emp_id,last_name AS lname,department_id "dep_id",salary*12 AS "annual sal"
FROM employees;

# 3.去除重复行
# 查询员工表中一共有哪些部门id呢?

# 错误的:没有去重的情况
SELECT department_id
FROM employees;
# 正确的:去重的情况
SELECT DISTINCT department_id
FROM employees;

# 错误的:
SELECT salary,DISTINCT department_id
FROM employees;

# 仅仅是没有报错,但是没有实际意义,显示的是每组dep+sal没有重复的
SELECT DISTINCT department_id, salary
FROM employees;

# 4.空值参与运算
# 1.空值:null
# 2.null不等同于0,'','null'
# 3.空值参与运算,结果一定也为空。
SELECT employee_id, salary, commission_pct, salary*(1+commission_pct)*12 "年工资"
FROM employees;
# 实际问题的解决方案:引入ifnull
SELECT employee_id, salary, commission_pct, salary*(1+IFNULL(commission_pct,0))*12 "年工资"
FROM employees;

# 5.着重号``
SELECT * FROM `order`;

# 6.查询常数,用来补充字段
SELECT '尚硅谷', 123, employee_id, last_name
FROM employees;

# 7.显示表结构
DESCRIBE employees;
DESC employees;

# 8.过滤数据
#练习:查询90号部门的员工信息
SELECT *
FROM employees
#过滤条件,声明在from结构的后面
WHERE department_id=90;

#练习:查询last_name为‘king’的员工的信息
SELECT *
FROM employees
#字符串用单引号表示;此处king不区分大小写是MySQL的问题,不是因为Windows不区分大小写
WHERE last_name='King';
————————
# 1.SQL的分类
/*
DDL:数据定义语言。CREATE\ALTER\DROP\RENAME\TRUNCATE

DML:数据操作语言。INSERT\DELETE\UPDATE\SELECT

DCL:数据控制语言。COMMIT\ROLLBACK\SAVEPOINT\GRANT\REVOKE
*/

#2.导入现有的数据表、表的数据。
/*
方式1:source 文件的全路径名
举例:source E:\BaiduNetdiskDownload\atguigudb.sql;

方式2:基于具体的图形化界面的工具可以导入数据
比如:SQLyog中,选择“工具”--“执行sql脚本”--选中xxx.sql即可。
*/
SELECT * FROM employees;

# 1. 最基本的SELECT语句: SELECT 字段1,字段2,… FROM 表名
SELECT 1+1,3*2;
#DUAL:伪表
SELECT 1+1,3*2 
FROM DUAL; 

# *:表中的所有的字段(或列)
SELECT * FROM employees;
SELECT employee_id,last_name,salary
FROM employees;

# 2.列的别名
# as:全称为alias(意为别名),可以省略
# 还可以,列的别名用一对双引号引起来,不要使用单引号。
SELECT employee_id emp_id,last_name AS lname,department_id "dep_id",salary*12 AS "annual sal"
FROM employees;

# 3.去除重复行
# 查询员工表中一共有哪些部门id呢?

# 错误的:没有去重的情况
SELECT department_id
FROM employees;
# 正确的:去重的情况
SELECT DISTINCT department_id
FROM employees;

# 错误的:
SELECT salary,DISTINCT department_id
FROM employees;

# 仅仅是没有报错,但是没有实际意义,显示的是每组dep+sal没有重复的
SELECT DISTINCT department_id, salary
FROM employees;

# 4.空值参与运算
# 1.空值:null
# 2.null不等同于0,'','null'
# 3.空值参与运算,结果一定也为空。
SELECT employee_id, salary, commission_pct, salary*(1+commission_pct)*12 "年工资"
FROM employees;
# 实际问题的解决方案:引入ifnull
SELECT employee_id, salary, commission_pct, salary*(1+IFNULL(commission_pct,0))*12 "年工资"
FROM employees;

# 5.着重号``
SELECT * FROM `order`;

# 6.查询常数,用来补充字段
SELECT '尚硅谷', 123, employee_id, last_name
FROM employees;

# 7.显示表结构
DESCRIBE employees;
DESC employees;

# 8.过滤数据
#练习:查询90号部门的员工信息
SELECT *
FROM employees
#过滤条件,声明在from结构的后面
WHERE department_id=90;

#练习:查询last_name为‘king’的员工的信息
SELECT *
FROM employees
#字符串用单引号表示;此处king不区分大小写是MySQL的问题,不是因为Windows不区分大小写
WHERE last_name='King';