【MySQL学习记录】第三章:基本的SELECT语句及课后练习

基本的SELECT语句

  • 1. SQL分类
    • 1.1 DDL:数据定义语言
    • 1.2 DML:数据操作语言
    • 1.3 DCL:数据控制语言
  • 2. SQL语言的规则与规范
    • 2.1 基本规则
    • 2.2 SQL大小写规范 (建议遵守)
    • 2.3 注释
    • 2.4 命名规则(暂时了解)
    • 2.5 数据导入指令
  • 3. SELECT语句
    • 3.1 最基本的SELECT语句
    • 3.2 列的别名(AS)
    • 3.3 去除重复行(DISTINCT)
    • 3.4 空值(null)
      • 3.4.1 null 不等同于0, '', 'null'
      • 3.4.2 null 参与运算结果也为null
    • 3.5 着重号 ``
    • 3.6 查询常数
    • 3.7 显示表结构(DESCRIBE或 DESC)
    • 3.8 过滤数据(WHERE)
  • 课后练习

1. SQL分类

1.1 DDL:数据定义语言

  1. CREATE
  2. ALTER
  3. DROP
  4. RENAME
  5. TRUNCATE

1.2 DML:数据操作语言

  1. INSERT
  2. DELETE
  3. UPDATE
  4. SELECT

1.3 DCL:数据控制语言

  1. COMMIT
  2. ROLLBACK
  3. SAVEPOINT
  4. GRANT
  5. REVOKE

2. SQL语言的规则与规范

2.1 基本规则

  • SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进
  • 每条命令以 ; 或 \g 或 \G 结束
  • 关键字不能被缩写也不能分行
  • 关于标点符号
    1. 必须保证所有的()、单引号、双引号是成对结束的
    2. 必须使用英文状态下的半角输入方式
    3. 字符串型和日期时间类型的数据可以使用单引号(’ ')表示
    4. 列的别名尽量使用双引号(" "),而且不建议省略as

2.2 SQL大小写规范 (建议遵守)

  • MySQL 在 Windows 环境下是大小写不敏感
  • MySQL 在 Linux 环境下是大小写敏感
    1. 数据库名、表名、表的别名、变量名是严格区分大小写的
    2. 关键字、函数名、列名(或字段名)、列的别名(字段的别名) 是忽略大小写的。
  • 推荐采用统一的书写规范:
    1. 数据库名、表名、表别名、字段名、字段别名等都小写
    2. SQL 关键字、函数名、绑定变量等都大写

2.3 注释

单行注释:#注释文字(MySQL特有的方式) 
单行注释:-- 注释文字(--后面必须包含一个空格。)
多行注释:/* 注释文字 */(不能嵌套)

2.4 命名规则(暂时了解)

  • 数据库、表名不得超过30个字符,变量名限制为29个 必须只能包含 A–Z, a–z, 0–9, _共63个字符
  • 数据库名、表名、字段名等对象名中间不要包含空格
  • 同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
  • 必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使 用`(着重号)引起来
  • 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了

2.5 数据导入指令

  1. 命令行客户端登录mysql,使用source指令导入
    source 路径
    # 例如
    source d:\mysqldb.sql
    
  2. 基于具体的图形化界面工具可以导入数据

3. SELECT语句

3.1 最基本的SELECT语句

SELECT 1;
SELECT 1+1, 3*2;
SELECT 1+1, 3*2 FROM DUAL;	# dual 伪表

SELECT 字段1,字段2, … FROM 表名;

SELECT * FROM employees;	# *表示所有的字段(或列)

SELECT employee_id, last_name, salary
FROM employees;	# 查看具体列

3.2 列的别名(AS)

  1. AS : 全称 alias(别名)
  2. 可以省略
  3. 可以使用 “” 引起来(必须是双引号,别名中存在空格时)【字符日期使用单引号】
  • 查询员工号,员工姓及部门号
    	SELECT employee_id, last_name, department_id
    	FROM employees;
    
    【MySQL学习记录】第三章:基本的SELECT语句及课后练习_第1张图片
  • 查询员工号(设置别名为 emp_id),员工姓(设置别名为lname)及部门号(设置别名为 dept_id)
    	SELECT employee_id emp_id, last_name AS lname, department_id "dept_id"
    	FROM employees;	
    
    【MySQL学习记录】第三章:基本的SELECT语句及课后练习_第2张图片

3.3 去除重复行(DISTINCT)

  • 查询部门号
    SELECT department_id 
    FROM employees;
    
    【MySQL学习记录】第三章:基本的SELECT语句及课后练习_第3张图片
    SElECT DISTINCT department_id 
    FROM employees;
    
    【MySQL学习记录】第三章:基本的SELECT语句及课后练习_第4张图片
    对比两种方式
    DISTINCT处于不同位置对结果有不同影响。
    SELECT salary, DISTINCT department_id
    FROM employees;	# 报错,salary 107条记录,department_id 12条;不满足实际情况
    
    在这里插入图片描述
    SELECT DISTINCT salary, department_id
    FROM employees;	# 无报错,但无实际意义。显示74行记录,考虑salary 和 department_id 的去重情况
    
    【MySQL学习记录】第三章:基本的SELECT语句及课后练习_第5张图片

3.4 空值(null)

3.4.1 null 不等同于0, ‘’, ‘null’

3.4.2 null 参与运算结果也为null

  1. 查询员工的年工资(年工资=, salary * (1 + commission_pct) * 12)
    SELECT employee_id, salary "月工资", commission_pct, salary * (1 + commission_pct) * 12 "年工资"
    FROM employees;
    
    【MySQL学习记录】第三章:基本的SELECT语句及课后练习_第6张图片
    解决方法:引入IFNULL
    SELECT employee_id, salary "月工资", commission_pct, salary * (1 + IFNULL(commission_pct, 0)) * 12 "年工资"
    FROM employees;
    
    【MySQL学习记录】第三章:基本的SELECT语句及课后练习_第7张图片

3.5 着重号 ``

作用:字段名或表名与关键字重复的问题

SELECT * FROM `order`;

【MySQL学习记录】第三章:基本的SELECT语句及课后练习_第8张图片

3.6 查询常数

作用:填充显示不存在于表中的字段

SELECT '尚硅谷', employee_id, last_name
FROM employees;

【MySQL学习记录】第三章:基本的SELECT语句及课后练习_第9张图片

3.7 显示表结构(DESCRIBE或 DESC)

作用:显示表中字段的详细信息

DESCRIBE employees;

【MySQL学习记录】第三章:基本的SELECT语句及课后练习_第10张图片

DESC departments;

【MySQL学习记录】第三章:基本的SELECT语句及课后练习_第11张图片

3.8 过滤数据(WHERE)

  1. WHERE 要声明在 FROM 的后面
  2. WHERE 要紧随 FROM
  • 查询90号部门的员工信息

    SELECT * 
    FROM employees
    WHERE department_id = 90;
    

    在这里插入图片描述

  • 查询 last_name 为 King 的员工信息

    select *
    FROM employees
    WHERE last_name = 'King';	#MySQL中'king'也可以,大小写不敏感
    

    在这里插入图片描述

课后练习

  1. 查询员工12个月的工资总和,并起别名为ANNUAL SALARY

    SELECT employee_id, last_name, salary * (1 + IFNUll(commission_pct, 0)) * 12 AS "ANNUAL SALARY"
    FROM employees;
    
  2. 查询employees表中去除重复的job_id以后的数据

    SELECT DISTINCT job_id
    FROM employees;
    
  3. 查询工资大于12000的员工姓名和工资

    SELECT first_name, last_name, salary
    FROM employees
    WHERE salary > 12000;
    
  4. 查询员工号为176的员工的姓名和部门号

    SELECT first_name, last_name, department_id
    FROM employees
    WHERE employee_id = 176;
    
  5. 显示表 departments 的结构,并查询其中的全部数据

    DESC departments;
    SELECT * FROM departments;
    

你可能感兴趣的:(MySQL,mysql,学习,数据库)