Mysql基础-第一天

一、SQL分类

  • DDL:数据定义语言 CREATE 、 ALTER 、DROP
  • DML:数据库操作语言 INSERT 、 DELETE 、UPDATE
  • DCL:数据控制语言 COMMIT 、 ROLLBACK 、 SAVEPOINT

二、基本查询语句

1.查询

SELECT 字段1,字段2 FROM 表名

2.列的别名

SELECT employee_id 员工号,last_name AS 名字,department_id FROM employees as e ;

3.出重

SELECT DISTINCT department_id FROM employees;

4.空值参与运算,结果为null

# 空值不等于0,'','null'
SELECT employee_id,salary "月工资",salary * ( 1 + commission_pct) * 12 "年工资" FROM employees;

#实际问题解决方案,引入IFNULL,用0替换null
SELECT employee_id,salary "月工资",salary * ( 1 + IFNULL(commission_pct,0)) * 12 "年工资",commission_pct FROM employees;

A22DE872-0E70-4A95-967A-309679484756.png

5.着重号 ``

#ORDER是一个sql关键字,如果有冲突,使用着重号
SELECT * FROM `order`

6.查询常数

SELECT '常数',123,employee_id,last_name
FROM employees

52924473-BAAF-4200-AAE7-7DEAD30FA431.png

7.显示表结构

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

8.过滤数据

# 查询depid是90号的信息
SELECT * FROM employees
WHERE department_id = 90;

三、运算符

1.算术运算符

99572D1C-5F4D-48FE-9C36-7CD91A6E7BD9.png

2.比较运算符

正确返回1,错误返回0

B45B9C0B-55CF-4385-B7FC-2A3108DE9DC3.png

# 字符串隐式转换,如果转换数值不成功,则看做0
# 如果等号两边有数字,则字符串转成数值进行比较
SELECT 1 = 2,1 != 2,1 = 'a',0 = 'a';

1AA39D5C-9241-476F-BAA1-859014060B04.png

# 如果两边都是字符串,则比较字符串的ANSI
SELECT 'a' = 'a' ,'a' = 'b';

F36544C0-4D2C-4C3C-8BEB-CCBEEACA96AA.png

# 只要有NULL参与,返回结果就为NULL
SELECT * FROM employees WHERE commission_pct = NULL;

FC73D140-A015-49A2-A7D6-36984198F034.png
安全等于 <=> 可以比较NULL值

SELECT 1 <=> NULL, NULL <=> NULL;
# 可以查询数据为NULL的行
SELECT employee_id,commission_pct FROM employees WHERE commission_pct <=> NULL;

33F5917E-6E57-4DBC-B3A0-3734C1882738.png

3.比较运算符

6F7EBBCF-8B41-4169-B65B-9C820A0F1F76.png

FF0B6709-5467-4041-BB98-D24F4E42413D.png

SELECT 'shkstart' REGEXP '^s','shkstart' REGEXP 't$','shkstart' REGEXP 'hk'
FROM DUAL;

13C9D8D0-A39F-4814-8B97-BE4F55E93A91.png

4.逻辑运算符

在Mysql中,逻辑运算符的返回结果为1、0或者NULL。AND优先级高于OR

B76379B9-0418-4833-82BC-174DA600FA36.png

# 10或20
SELECT last_name,salary
FROM employees
WHERE department_id = 10 OR department_id = 20;
# 工资不在6000到8000
SELECT last_name,salary
FROM employees
WHERE salary NOT between 6000 and 8000;
# XOR 逻辑异或
# 满足50 不满足 大于6000
# 不满足50 满足大于6000
SELECT last_name,salary,department_id
FROM employees
WHERE department_id = 50 XOR salary > 6000;

5.位运算符

FEC512B1-FDB6-467D-8FA7-E5DA6187B1D7.png

B4DC124D-73CE-4EAB-AA39-EB81E743B588.png

四、排序与分页

1.排序

1.1排序规则

  • 使用ORDER BY 子句排序
    • ASC:升序
    • DESC:降序
  • ORDER BY 子句在SELECT语句的结尾。
  • 如果没有排序操作,默认情况下查询返回的数据是按照添加数据的顺序显示的。
# 按照salary从高到低
SELECT * FROM employees
ORDER BY salary DESC ;

2.分页

# limit(偏移量,每页条数)
# 每页显示20条记录,从第一页开始
SELECT employee_id,last_name
FROM employees
LIMIT 0,20;

五、多表查询

1.笛卡尔积

每个员工都跟每个部门匹配了一遍,默认交叉连接匹配模式,缺少连接条件

# 查询员工的姓名、部门,查询出2889条数据
SELECT employee_id,department_name
FROM employees,departments;
#107条
SELECT *
FROM employees;
#27条
SELECT *
FROM departments;

2.正确连接方式,需要有连接条件

SELECT employee_id,department_name
FROM employees,departments
WHERE employees.department_id = departments.department_id;

3.等值连接、非等值连接

#非等值连接
SELECT last_name,salary,grade_level
FROM employees e ,job_grades j
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;

4.自连接、非自连接

#自连接
#查询员工id,员工姓名,管理者id和姓名
SELECT emp.employee_id,emp.last_name,mgr.employee_id 管理者id,mgr.last_name 管理者姓名
FROM employees emp,employees mgr
WHERE emp.manager_id = mgr.employee_id;

5.内连接、外连接

  • 内连接:合并具有同一列的两个以上的表的行,结果集不包含一个表与另一个表不匹配的行
SELECT employee_id,department_name
FROM employees e,departments d
WHERE e.department_id = d.department_id;
  • 外连接:合并具有同一列的两个以上的表的行,结果集包含一个表与另一个表匹配的行还查到了左表或者右表不匹配的行
  • 左连接:额外返回左表中不满足条件的行
  • 右连接:额外返回右表中不满足条件的行
#左连接
SELECT last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.department_id = d.department_id;

6.七种JOIN操作

E9340D60-8E4D-43AD-9F3B-F89FBEACFD3B.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值