一.基本的SELECT语句

257 阅读3分钟

一.SQL 分类

SQL语言在功能上主要分为如下3大类:

  • DDL(Data Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索 引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。 主要的语句关键字包括 CREATE 、 DROP 、 ALTER 等。
  • DML(Data Manipulation Language、数据操作语言),用于添加、删除、更新和查询数据库记 录,并检查数据完整性。 主要的语句关键字包括 INSERT 、 DELETE 、 UPDATE 、 SELECT 等。 SELECT是SQL语言的基础,最为重要。
  • DCL(Data Control Language、数据控制语言),用于定义数据库、表、字段、用户的访问权限和 安全级别。 主要的语句关键字包括 GRANT 、 REVOKE 、 COMMIT 、 ROLLBACK 、 SAVEPOINT 等。

二.命名规则

  • 数据库、表名不得超过30个字符,变量名限制为29个
  • 必须只能包含 A–Z, a–z, 0–9, _共63个字符
  • 数据库名、表名、字段名等对象名中间不要包含空格
  • 同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名,同一个表中,字段不能重名 ;
  • 必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使 用`(着重号)引起来 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据 类型在一个表里是整数,那在另一个表里可就别变成字符型了
  • 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据 类型在一个表里是整数,那在另一个表里可就别变成字符型了
#以下两句是一样的,不区分大小写 
show databases; 
SHOW DATABASES; 
#创建表格 #
create table student info(...); 
#表名错误,因为表名有空格 
create table student_info(...);
#其中order使用``飘号,因为order和系统关键字或系统函数名等预定义标识符重名了 
CREATE TABLE `order`);
select id as "编号", `name` as "姓名" from t_stu; #起别名时,as都可以省略 
select id as 编号, `name` as 姓名 from t_stu; #如果字段别名中没有空格,那么可以省略"" 
select id as 编 号, `name` as 姓 名 from t_stu; #错误,如果字段别名中有空格,那么不能省略""

三.数据导入指令

  • mysql> source d:\mysqldb.sql

四.最基本的select语句: SELECT 字段1,字段2,... FROM 表名

SELECT 1 + 1,3 * 2
FROM DUAL; #dual:伪表
# *:表中的所有的字段(或列)
SELECT * FROM employees;

SELECT employee_id,last_name,salary
FROM employees;

五.列的别名

# 列的别名可以使用一对""引起来,不要使用''。
SELECT employee_id emp_id,   #方式一
last_name AS lname,  #方式二
department_id "部门id",  #方式三
salary * 12 AS "annual sal"  #方式四
FROM employees;

六.去除重复行

#查询员工表中一共有哪些部门id呢?
#错误的:没有去重的情况
SELECT department_id
FROM employees;
#正确的:去重的情况
SELECT DISTINCT department_id
FROM employees;

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

#仅仅是没有报错,但是没有实际意义。
SELECT DISTINCT department_id,salary
FROM employees;

七.空值参与运算

# 1. 空值:null

# 2. null不等同于0'''null'
SELECT * FROM employees;

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

八.着重号 ``

#错误的,order是mysql的关键字,不可用于表面或字段,除非加上着重号 ``
SELECT * FROM ORDER;
#正确的
SELECT * FROM `order`;

九. 查询常数

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

十.显示表结构

DESCRIBE employees; #显示了表中字段的详细信息

DESC employees;

DESC departments;

十一.过滤数据

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

#练习:查询last_name为'King'的员工信息
SELECT * 
FROM EMPLOYEES
WHERE LAST_NAME = 'King';