Mysql研学-SQL语言基础

2023-12-14 08:39:15

一 DDL语句:数据定义语言

1 作用:操作表

2 常用关键字

??CREATE(创建)

?? DROP(删除(销毁))

?? ALTER修改

3 格式

-- 单行注释

/* 多行注释 */

删除表:DROP TABLE [IF EXISTS] 表名;括号内为查看该表是否存在有则删

创建表:参考JavaBean中定义有参构造器   (最后一列不写逗号)
CREATE TABLE 表名(
列名1 数据类型[约束] [字段约束],
列名2 数据类型[约束] [字段约束],
 .....
列名n 数据类型[约束] [字段约束]
);

4 表约束 – 又称字段约束或列约束

作用:限定表中指定字段存储数据的规则;需要根据表中的列含义和实际情况相结合来编写表约束

分类:

① 通用约束 – 所有的关系型数据库

非空约束 -- NOT NULL(常用)

唯一约束 -- UNIQUE(常用)

默认值的约束 -- DEFAULT(没有特殊要求一般不用)

外键约束 -- FOREIGN KEY(必须是多表操作目前用不上)

主键约束 -- PRIMARY KEY(重点)

?? 特点1:非空且唯一,等价于NOT NULL UNIQUE同时使用

?? 特点2: 每张表中有且仅有一个主键字段

?? 特点3:如果表中定义主键字段,推荐使用不具备业务逻辑的列作为主键

② "方言"约束只适用于MySQL数据库

AUTO_INCREMENT -- 主键自增长

?? 特点:必须配置主键字段编写,默认从1开始,每次增长1,类似Java中的++或+=1

③ 例子

# 判断表是否存在,若存在则删除
DROP TABLE IF EXISTS t_employee;

# 创建表
CREATE TABLE t_employee(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
eid VARCHAR(10) NOT NULL UNIQUE,
ename VARCHAR(6) NOT NULL,
job VARCHAR(10),
salary INT(10)
);

二 DML语言 – 数据操作语言

1 作用:对表中数据进行增删改操作

2 关键字

INSERT INTO ... VALUES... --插入

UPDATE ... SET... -- 修改

DELETE FROM ... --删除

3 插入数据

# 向表中所有字段插入一条数据,VALUES语句中的值与表中字段的顺序一致
# INSERT INTO 表名 VALUES(1,2....);
INSERT INTO t_employee
VALUES(1,'tj001',"大黄",'医药代表',15000);

# 向表中指定字段(不具有自增长和默认值的字段)插入一条数据
# INSERT INTO 表名(1,2....)VALUES(1,2....);
INSERT INTO t_employee(eid,ename,job)
VALUES("tj002","大白",'机器人');

# 同时向表中指定字段插入多条数据(常用)
# INSERT INTO 表名 (1,2...)VALUES(1,2....),(1,2....),(1,2....);
INSERT INTO t_employee(eid,ename,job)
VALUES("tj004","大橘",'机器人'),("tj003","小黑",'保安');

4 修改数据

# 不对修改设置条件,表中所有数据都会被修改
# UPDATE 表名 SET1=,2=....[WHERE 条件];

# 将所有员工的职业设置为智能机器人
UPDATE t_employee
SET job='智能机器人';

# 将大黄的职业设置为保安
UPDATE t_employee
SET job='保安'
WHERE ename='大黄';

5 删除数据

# 不对删除设置条件,表中所有数据都会被删除
# DELETE FROM 表名[WHERE 条件]

# 删除员工编号为tj004的员工
DELETE FROM t_employee
where eid='tj004';

# 删除表中所有数据
DELETE FROM t_employee;

6 DELETE语句与DROP语句区别

?? ① DELETE语句:DML语句,操作表中数据,删除表中数据,保留表结构

?? ② DROP语句:DDL语句,操作表,将表结构删除

三 DQL语言 – 数据查询语言

1 作用:查询表中的数据

2 查询操作结果分类

?? ① 没有结果 – 0条数据

?? ② 有一个结果 – 1条数据

?? ③ 多个结果 – 存放到List集合中

3 语法

① 查询员工表所有信息

# * 表示查询指定表中所有的字段
# 字段: 字段表示查询表中的指定字段
# 函数: 表示调用MySQL定好的方法
SELECT *|字段|函数 FROM 表名;

# 查询员工表所有信息
SELECT * FROM t_employee;

# 查询员工表指定字段
SELECT ename,eid FROM t_employee;

② 去重查询

SELECT DISTINCT ename,eid
FROM t_employee;

③ 算数运算符: + - * /

# MySQL中算数运算符只针对数值型和日期类型数据
# 数值型数据可以进行 + - * /操作;日期型只支持 + - 操作

# 员工工资翻倍
SELECT ename,salary,(salary*2)
FROM t_employee;

# 员工工资翻倍再加上5000块绩效
SELECT ename,salary,(salary*2+5000)
FROM t_employee;

④ 给指定字段定义别名

# 起别名时 as 可省略
SELECT ename,salary,(salary*2+5000) as '工资'
FROM t_employee;

⑤ 给定格式显示数据

# 使用CONCAT(1,烈2...)
SELECT ename,salary,CONCAT(ename,"拿到了双倍工资",(salary*2),"还有",5000,"的绩效") 工资说明
FROM t_employee;

⑥ 过滤查询

# SELECT *|字段|函数 FROM 表名 WHERE 条件;
# 关系判断: > >= < <= = <>(不等于,等价!=)

# 查询工作不是智能机器人的员工
SELECT ename,job
FROM t_employee
WHERE job <> "智能机器人";

⑦ 逻辑判断 – AND(&&)

# 查询工资大于10000且工作不是智能机器人的员工
SELECT ename,salary
from t_employee
WHERE salary >= 10000 AND job <> '智能机器人';

# BETWEEN AND 当判断条件仅有1个字段时可使用,取值范围包括端点
SELECT ename,salary
from t_employee
WHERE salary BETWEEN 10000 AND 15000;

⑧ 逻辑判断 – OR(||)

# 查询工资大于12000或者工作不是智能机器人的员工
SELECT ename,salary
from t_employee
WHERE salary > 12000 or job <> '智能机器人';

# IN(1,2,...) 判断条件仅有一个字段时使用,条件的结果是确定的几个值中的任意一个
SELECT ename,salary
from t_employee
WHERE salary IN(10000,12000,15000);

⑨ 逻辑判断 – NOT(!)

# 查询工资不是1000012000的员工
SELECT ename,salary
from t_employee
WHERE salary NOT IN(10000,12000);

⑩ 特殊值判断 – 判断当前字段是否为 NULL

# 为空 IS NULL 不为空 IS NOT NULL
SELECT ename,salary
from t_employee
WHERE salary IS NULL;

### MySQL中运算符的优先级 (由高到低)
() >算数(+ - * /) >关系 >NOT > AND >OR

4 模糊查询 – 关键字搜索

① 语法

SELECT * | 字段 |函数 FROM 表名 WHERE 字段 LIKE;

② 通配符

?? _:表示一个字符

?? %:表示任意多个字符,取值范围[0,正无穷)

# 查询名字大字共计开头两个字的员工
SELECT ename,salary
from t_employee
WHERE ename LIKE '大_';

# 查询名字含黄字的员工
SELECT ename,salary
from t_employee
WHERE ename LIKE '%黄%';

5 排序显示

① 语法

SELECT * |字段 |函数 FROM 表名 ORDER BY[排序方式,[排序方式],....];

??排序会增加用户等待时长;一般参与排序的字段数据类型为数值型或日期型;
??使用多个字段进行排序,当且仅当前一个字段无法排序时,才会使用后一个字段的排序方式进行操作

② 分类
??升序排序:默认的排序方式,关键字ASC,可以省略不写

??降序排序:关键字 DESC ,必须写

# 按照工资降序排序,同时按照工号升序排序
SELECT ename,salary
from t_employee
ORDER BY salary DESC,eid;

6 分页显示

① 优势

??提高用户观感度

??一定程度上避免内存溢出的风险

② 语法

# LIMIT语句是MySQL"方言"
# 第一个?:表示当前页开始显示数据的下标(0开始)
# 第二个?:表示的是当前也显示数据的条数
# 例子:一共16条数据,每页显示3条
# 第一页下标 0 第二页下标 3

SELECT * |字段 |函数
FROM 表名
LIMIT ?,?;

# 将员工信息分页展示,每页3条数据,显示第2SELECT ename,salary
from t_employee
LIMIT 6,3;

7 小结

① 完整的DQL 语句

SELECT *|字段|函数
FROM 表名
[WHERE 条件]
[ORDER BY 排序字段]
[LIMIT ?,?];

② 执行顺序
??从指定的表中(FROM语句),根据指定条件(WHERE语句),查询指定的数据(SELECT 语句),根据指定的字段进行排序(ORDER BY语句),以指定的条件进行分页显示(LIMIT 语句)

四 聚合函数 – 分组函数

1 作用:针对表中指定的某一个字段进行统计操作,是由MySQL定义好的方法,直接调用即可

2 常见聚合函数 – 5个

COUNT(字段) -- 统计指定字段个数

以下4个聚合函数只对数值型数据有意义

SUM(字段) -- 统计指定字段的数据总和

AVG(字段) -- 统计指定字段的数据平均值

MAX(字段) -- 统计指定字段的数据最大值

MIN(字段) --统计指定字段的数据最小值


# 查询员工总数
SELECT COUNT(id) from t_employee;

# 查询此次公司给员工发放的薪水总额,与平均工资
# 聚合函数对NULL值会进行忽略,做统计操作需配合IFNULL(字段,替换值)方法
SELECT SUM(salary) '发放金额',AVG(IFNULL(salary,0)) '员工平均工资',MAX(salary) '第一',MIN(salary) '倒数'
from t_employee;

??聚合函数对于字段中的NULL值会进行忽略处理;因此在进行统计总数操作时,需使用具有非空约束的字段

五 导入与导出

1 导出命令

??mysqldump -u用户名 -p密码 指定的数据库名 > 导出的地址(.sql结尾)

2 导入命令:前提是指定的数据库必须存在

??mysql -u用户名 -p密码 指定的数据库名 < 导入的地址(.sql结尾)

文章来源:https://blog.csdn.net/zhlyxx/article/details/134904285
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。