MySQL代码整理

MySQL代码整理

创建表
表单元素:表名,表的字段
表字段的元素:字段名、数据类型、字段长度、约束
语法

CREATE TABLE table_name(
    字段名称 字段数据类型 [字段约束],
    字段名称 字段数据类型 [字段约束]
)

示例

CREATE TABLE student(
    id INT AUTO_INCREMENT PRIMARY KEY,
    age INT NOT NULL,
    code INT NOT NULL,
    name VARCHAR(50) NOT NULL
)

SQL注释
用 – 表示
MySQL字段类型
数值:
- INT :整型
- DECIMAL:浮点类型
- 其他数值类型:SMALLINT NUMBERIC
日期:
- DATE:值表示日期
- DATETIME:日期和时间
字符串:
- VARCHAR:可变长度
- TEXT:长文本类型
- CHAR:定长
表的约束
1. 主键约束(PRIMARY KEY)
2. 非空约束(NOT NULL)
3. 默认值(DEFAULT)
4. 唯一约束(UNIQUE KEY)
5. 外键约束(FOREIGN KEY)
6. 自动增长:(AUTO_INCREMENT)

删除表

    DROP TABLE table_name;

修改表名

    ALTER TABLE table_name RENAME table_name1;

增加字段

    ALTER TABLE table_name ADD age VARCHAR(200) NOT NULL;

修 改字段类型

    ALTER TABLE table_name CHANGE name name1 VARCHAR

**

修改数据语句

新增数据
指定字段插入语法:

    INSERT INTO table_name(filed1,filed2) VALUES(value1, value2)

批量插入查询结果:

    ALTER TABLE table_name  (filed1,filed2) SELECT filed1,filed2... FROM name;

修改数据

语法:

UPDATE table_name SET field1=value1, field2=value2, ... WHERE condition

示例:

UPDATE s SET code='ss6',birthday='1990-10-10' WHERE name='zhangsan'

删除数据

语法:

DELETE FROM table_name WHERE condition

示例:

DELETE FROM s WHERE name='zhangsan'

**

数据检索操作

**


简单的数据检索
指定字段的数据记录查询

SELECT field1, field2,... FROM table_name [WHERE condition] [ORDER BY field1 ASC/DESC, field2 ASC/DESC,...]

查询所有数据
使用通配符*查询
语法:

SELECT * FROM table_name [WHERE condition]

避免重复数据的查询
使用关键字:DISTINCT

条件查询

带关系运算符和逻辑运算符的表达式;
带 BETWEEN AND 关键字的条件查询;
带 IS NULL 关键字的条件查询;
带 IN 关键字的条件查询;
带 LIKE 关键字的条件查询。
关系运算符和逻辑运算符
关系运算符:>、 >=、 <、 <=、 !=(<>)、 =;
逻辑运算符:AND(&&)、OR(||)、NOT(!)、XOR。

BETWEEN ADN
一般用在对数值或者日期的区间判断条件中,而且是可以被替代的。

IS NULL
判断数据结果集中非空元素,要注意的是:NULL 和 空字符串是两个概念,使用的查询条件不尽相同

IN

条件在某些离散的数据范围内

LIKE

模糊查询:用的较多,一般用到的是全匹配 %搜索字%,尾部匹配 搜索字%
其他还有单个字匹配 _ 和首部匹配 %搜索字

数据排序

数据的排序方式:顺序 ASC、逆序 DESC。
在排序中是可以多字段排序的,即会有第一排序条件和第二、三…次排序条件

限制数据记录数量
使用 LIMIT 关键字,后面跟两个参数,第一个参数是从第几条开始,第二个是一共显示多少条记录

统计函数和分组查询

例如要查询:
每个班级有多少学生;
每个班级中年龄最大的学生是谁;

SELECT 
clazz,MAX(age) AS '最大年龄',
COUNT(*) AS '多少人' 
FROM stu_info 
WHERE id > 2
GROUP BY clazz HAVING count(*) > 1
ORDER BY MAX(age) DESC

执行顺序

筛选整个表找那个id > 2 的数据;
把筛选出的记录按照 clazz 字段进行分组;
把分组完的结果,筛选出每组数据总数量 > 1的数据 count(*) > 1;
按照分组后的字段进行排序 MAX(age) DESC;
按照 SELECT 中要求显示的字段输出结果集。

分组查询语法:

SELECT
分组完的字段1,
分组完的字段2,
...
FROM 表名 
[WHERE 全局表的过滤条件] 
[GROUP BY 表字段1, 表字段2
 HAVING 分组完成后的过滤条件(可以加聚合)
]
[ORDER BY 分组完的字段1 ASC/DESC, 分组完的字段2 ASC/DESC,...]

表之间的关系

一对多(多对一)
在多的一方加入一的一方的外键。+

多对多

通过一个中间表将两个表之间建立关系。
一对一

在所谓的子表中加入所谓主表的外键,并加上唯一性约束。

**自然连接查询**
使用 WHERE 条件将两个表之间进行关联查询

– 查询学员的学号、姓名、所在班级名称
SELECT s.clazz_id,s.code,s.name,c.id,c.name
FROM student as s, clazz as c
WHERE S.clazz_id = C.id


**内连接查询**

内连接查询是可以使用自然连接查询替代的,但是效率方面,内连接会高

SELECT s.code, s.name, c.name FROM student s
INNER JOIN clazz c ON s.clazz_id = c.id


**左外连接查询**

以左表为主表,左表中的数据都会被显示出来,关联的右表中,如果存在符合条件的数据,那么会被关联出并显示,如果没有,则会显示 NULL。

– 查询学员选课信息,要求显示出班级、账号、课程等基础信息
SELECT
cl.name as ‘班级名称’,
s.code as ‘学号’,
s.name as ‘姓名’,
a.username as ‘账号’,
a.password as ‘账号密码’,
c.name as ‘课程名称’
FROM student_course sc
LEFT JOIN student s ON sc.student_id = s.id
LEFT JOIN course c on sc.course_id = c.id
LEFT JOIN clazz cl on s.clazz_id = cl.id
LEFT JOIN account a on a.student_id = s.id
“`

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值