数据库增、删、改、用(数据库、数据库编码方式)
— 当指定名称的数据库不存在的时候创建它,并且设置编码和排序规则
CREATE DATABASE IF NOT EXISTS db_name CHARACTER SET utf8 COLLATE utf8_general_ci;
— 显示当前的所有数据库
SHOW DATABASES;
— 显示数据库的创建语句,可以用于查看默认编码方式
SHOW CREATE DATABASE db_name;
— 修改数据库的默认编码方式
ALTER DATABASE db_name CHARACTER SET GBK;
— 如果数据库存在,则删除它
DROP DATABASE IF EXISTS db_name;
— 使用某一个数据库
USE db_name;
表的设计(表、字段、字段类型)
— 创建一张表,设置其中的字段信息(列名\类型)
CREATE TABLE my_table_name(
m_id INT,
m_name VARCHAR(32),
m_sex BOOL,
m_class VARCHAR(32),
m_start_date DATETIME
)CHARACTER SET utf8 COLLATE utf8_general_ci;
— 显示指定表的字段信息
DESC my_table_name;
— 查看数据库的所有的表
SHOW TABLES;
— 查看创建表的时候实际使用的语句
SHOW CREATE TABLE my_table_name;
— 在指定表的每一个位置添加一个字段 [FIRST \ AFTER column]
ALTER TABLE my_table_name ADD test2 INT AFTER column_name;
— 使用 MODIFY 修改指定表中某一列的类型
ALTER TABLE my_table_name MODIFY test1 DOUBLE;
— 使用 CHANGE 修改指定表中某一列的类型和列名
ALTER TABLE my_table_name CHANGE test1 test1_new INT;
— 删除表中的指定字段
ALTER TABLE my_table_name DROP test1_new;
— 删除表
DROP TABLE my_table_namee
表的增加(某些行的数据)
— 为指定表的所有字段添加一条记录
INSERT INTO my_table VALUE(1, ‘xioaming’, ‘男’, ‘36’, “2018-1-1 09:41:02”);
— 未指定表的指定字段添加一条记录,非空字段必须添加
INSERT INTO my_table(m_name, m_sex) VALUE(‘xiaogang’, ‘保密’);
— 给指定表的所有字段添加多行内容
INSERT INTO my_table
VALUES
(1, ‘xiaoming’, ‘男’, ‘36’, “2018-1-1 09:41:02”),
(2, ‘xiaogang’, ‘女’, ‘35’, “2018-4-1 09:41:02”),
(3, ‘xiaohong’, ‘男’, ‘34’, “2018-2-1 09:41:02”),
(4, ‘xiaolv’, ‘女’, ‘36’, “2018-8-1 09:41:02”),
(5, ‘dabai’, ‘男’, ‘36’, “2018-3-1 09:41:02”),
(6, ‘dahei’, ‘女’, ‘35’, “2018-5-1 09:41:02”),
(7, ‘zhonglan’, ‘男’, ‘34’, “2018-7-1 09:41:02”),
(8, ‘zhongzi’, ‘保密’, ‘38’, “2018-6-1 09:41:02”),
(9, ‘xioaming’, ‘保密’, ‘33’, “2018-9-1 09:41:02”);
表的修改(某些行的数据)
— 设置所有的用于性别为女
UPDATE my_table SET sex=”女”;
— 待条件的设置某些用户的性别为女
UPDATE my_table SET sex=”男” WHERE m_class=”36”;
表的删除(某些行的数据)
— 删除姓名为小红的字段
DELETE FROM my_table WHERE m_name=’xiaohong’;
— 班级表,描述班级的信息
CREATE TABLE my_class(
m_id INT PRIMARY KEY AUTO_INCREMENT,
m_name VARCHAR(32) NOT NULL UNIQUE,
m_count INT NOT NULL DEFAULT 0
)CHARACTER SET utf8 COLLATE utf8_general_ci;
表的约束(字段)
— 表的约束类型
CREATE TABLE my_student(
— 主键:非空且唯一的,通常是 id 值,并且是自增的
m_id INT PRIMARY KEY AUTO_INCREMENT,
— 唯一约束:不能重复的,且非空的
m_name VARCHAR(32) UNIQUE NOT NULL,
— 默认约束,设置了默认约束的字段可以不进行手动的添加
m_sex ENUM(‘男’, ‘女’, ‘保密’) DEFAULT ‘保密’,
— 外键,关联到班级表的主键
m_class INT NOT NULL
)CHARACTER SET utf8 COLLATE utf8_general_ci;
— 为 my_student 中的 m_class 添加外键关联到 my_class 中的 m_id
— 在添加数据的过程中,外键必须是一个已经存在的主键
ALTER TABLE my_student ADD FOREIGN KEY(m_class) REFERENCES my_class(m_id);
表的查询(联合某些表筛选某些行)
简单查询
— 简单的查询所有的数据
SELECT * FROM my_student;
— 查询指定表的某一列数据
SELECT m_name, m_sex FROM my_student;
— 当前的学生分布在哪些班级[去重]
SELECT DISTINCT m_class FROM my_student;
— 对查询到的结果进行运算,
SELECT m_name, m_score*0.6 FROM my_student;
— 对查询到的数据取别名
SELECT m_name as 姓名, m_score*0.6 成绩 FROM my_student;
条件查询
— 带条件的查询之关系运算符
SELECT m_name FROM my_student WHERE m_class > 1;
— 带条件的查询之IN,位于某些数据之中
SELECT m_name,m_class FROM my_student WHERE m_class IN(1, 5);
— 带条件的查询之 BETWEEN AND,位于某个区间
SELECT m_name,m_class FROM my_student WHERE m_class BETWEEN 1 AND 3;
— 带条件的查询之 LINK _(一个任意字符) %(任意个任意字符)
SELECT m_name FROM my_student WHERE m_name LIKE “__a%”;
— 查询所有分数大于 50 且性别为女的同学
SELECT * FROM my_student WHERE m_score > 50 AND m_sex=’女’;
— 对查询到的结果,按照学生的分数,以升序进行排序
SELECT * FROM my_student ORDER BY m_score DESC;
— 以降序查询分数最高的前三位同学的信息(起始,个数)
SELECT * FROM my_student ORDER BY m_score DESC LIMIT 0, 3;
统计查询
— 统计学生个数 COUNT(|列名) 统计记录的条数
SELECT COUNT() FROM my_student;
— 统计玩家平均积分 AVG(数值类型列名) 平均值
SELECT AVG(m_score) FROM my_student;
— 统计用户的总分和 SUM (数值类型列名) 求和
SELECT SUM(m_score) FROM my_student;
— 获取用户的最高分积分 MAX(列名) 最大值
SELECT MAX(m_score) FROM my_student;
— 可以使用 md5 和 sha1 等函数直接的获取计算后的结构
SELECT md5(sha1(“123”));
— 分组查询,枚举出指定列的指定信息进行运算
SELECT m_class, COUNT(*) FROM my_student GROUP BY m_class;
— 查询班级数大于 3 的班级每个班实际有多少同学
SELECT m_class, COUNT(*) FROM my_student GROUP BY m_class HAVING m_class > 3;
— 多表查询,交叉连接,查询到的是两张表的乘积(笛卡尔积)
SELECT * FROM my_class, my_student;
— 多表查询,内连接,将两张表的字段进行了比较
SELECT * FROM my_class, my_student WHERE my_class.m_id = my_student.m_class;
— 左外连接查询, on 后面是查询条件,以左边的 my_class 为主,如果右边没有数据匹配,就填充 null
SELECT * FROM my_class left join my_student ON my_class.m_id = my_student.m_class;
— 子查询:外层查询的查询结果依赖于内层的查询, in 条件,结果是否在集合中
SELECT DISTINCT * FROM my_class
WHERE m_id in
(
SELECT m_class FROM my_student WHERE m_sex=”女”
);
-- 判断有没有任何一个同学分数小于 50, 如果有则输出后三名<br />SELECT * FROM my_student, my_class<br /> WHERE EXISTS<br /> (<br /> SELECT m_score FROM my_student WHERE m_score < 50<br /> ) AND my_student.m_class = my_class.m_id<br /> ORDER BY m_score ASC LIMIT 0, 3;
— 如果有男生和任何一个女生的成绩相同就输出信息
SELECT * FROM my_student, my_class
WHERE m_score=ANY
(
SELECT m_score FROM my_student WHERE m_sex=’女’
) AND my_student.m_class = my_class.m_id AND m_sex=’男’;
— 如果有男生的成绩大于任何一个女生的成绩就输出信息
SELECT * FROM my_student, my_class
WHERE m_score>ALL
(
SELECT m_score FROM my_student WHERE m_sex=’女’
) AND my_student.m_class = my_class.m_id AND m_sex=’男’;