您的位置:首页 > 数据库 > MySQL

MySQL代码整理

2017-10-20 16:28 99 查看

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;

a74a

按照 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

“`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: