MySQL代码整理

来源:互联网 发布:淘宝店铺鞋子logo 编辑:程序博客网 时间:2024/06/01 20:25

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 > 2GROUP BY clazz HAVING count(*) > 1ORDER 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
“`

原创粉丝点击