1. 创建数据库
CREATE DATABASE `json`;
// 语法:
CREATE DATABASE `数据库名`;
2. 查看现有数据库
SHOW DATABASES;
3. 删除数据库
drop database json;
// 语法
drop database 数据库名;
4.选择数据库
use json;
语法
use 数据库名;
5. 建立数据表
CREATE TABLE `STUDENT`;
语法
CREATE TABLE `表名`;
6. 删除数据表
DROP TABLE STUDENT;
语法
DROP TABLE 数据表名;
7. 查看表格样式
describe `STUDENT`;
语法
describe `数据表名`;
8. 查看数据表
select * from STUDENT;
语法
select * from 数据表名;
9. 填写数据表信息
(1)
INSERT INTO `student`
VALUES(2,'小黄','computer',NOW());
(2)
INSERT INTO `student`
(`student_id` , `name` , `major` , `submission_date`) -- 加入这个括号可以设置填写顺序
VALUES(3,'小率','computer',NOW());
语法
INSERT INTO `数据表`
VALUES(数据);
10. 插入为数据表属性
ALTER TABLE `student` ADD gpa DECIMAL(3,2); -- 给表格添加属性
ALTER TABLE `student` DROP COLUMN gpa; -- 给表格删除属性
创建数据表的其他关键字
CREATE TABLE `student1` ( -- 创建表格
`student_id` INT PRIMARY KEY auto_increment,
-- 设置 PRIMARY KEY 后这个值不能重复
-- AUTO_INCREMENT 增加自动加 1
`name` VARCHAR(20) NOT NULL, -- 这个值不能为空 ( constraints 限制 约束 )
`major` VARCHAR(20) ,
`score` INT NOT NULL ,
`submission_date` timestamp
);
数据类型:
类型 | 大小 | 范围 | 范围 | 用途 |
TINYINT | 1 BYTES | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 BYTES | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 BYTES | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 BYTES | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 BYTES | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 BYTES | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 BYTES | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
日期
字符串
UPDATE 和 DELETE// 使用前 将预设的更新模式关闭 防止出错 SET SQL_SAFE_UPDATES = 0; -- 刷新资料 UPDATE `student1` SET `score`=99 WHERE `student_id`=1; -- 删除资料 DELETE FROM `student1` WHERE `student_id` = 3; -- 可以使用判断条件来筛选符合条件的删除 -- > < >= <= = <> : 不等于 -- 删除资料 DELETE FROM `student1` WHERE `student_id` > 3;
排序
-- order by 排序 按照成绩排序 后面加一个 DESC 是从高到低的意思 SELECT * FROM `student1` ORDER BY `score` DESC; -- order by 排序 按照成绩排序 默认从低到高的意思 SELECT * FROM `student1` ORDER BY `score`;
LIMIT 限制-- LIMIT 限制 下面这个是限制回传前 2 位置 的资料 SELECT * FROM `student1` LIMIT 2;
查找
-- 在所有 name 中 找 guibin 和 老6 SELECT * FROM `student1` WHERE `name` IN('guibin' , '老6');
例子:
-- 建立 employee 表
CREATE TABLE `employee`(
`emp_id` INT PRIMARY KEY,
-- PRIMARY KEY 约束唯一标识数据库表中的每条记录。
-- 主键必须包含唯一的值。
-- 主键列不能包含 NULL 值。
-- 每个表都应该有一个主键,并且每个表只能有一个主键。
`name` VARCHAR(20),
`birth_date` DATE,
`sex` VARCHAR(1),
`salary` INT,
`branch_id` INT,
`sup_id` INT);
-- 删除 数据表中所有数据
delete from `employee`;
-- 查找数据表中所有数据
SELECT * FROM `employee`;
ALTER TABLE `employee` DROP COLUMN branch_id; -- 给表格删除属性
ALTER TABLE `employee` DROP COLUMN sup_id; -- 给表格删除属性
-- BRANCH
CREATE TABLE `branch`(
`branch_id` INT PRIMARY KEY,
`branch_name` VARCHAR(20),
`manager_id` INT,
FOREIGN KEY (`manager_id`) REFERENCES `employee`(`emp_id`) ON DELETE SET NULL
-- 一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。
-- on delete null
-- 如果emp_id 删除 就会将 manager_id 设置为 NULL
-- 注意 当这个属性被设置为 PRIMARY KEY 时候就不可以设置这个属性会出错
-- on delete cascade
-- 如果emp_id 删除 就会将 manager_id 的所有资料一起删除
REFERENCES 这里意思是将manager_id 与 emp_id 绑定
);
-- aggregate function 聚合函数
-- 1 取得员工人数 SELECT COUNT(*) FROM `employee`; -- 查看有 sup_id 这个属性的有多少个人 SELECT COUNT(`sup_id`) FROM `employee`; -- 2 取得所有出生 1970-01-01 之后的女性员工数量 SELECT COUNT(*) FROM `employee` WHERE `birth_date` > '1970-01-01' AND `sex` = 'F'; -- 3 取得所有员工的平均薪资 SELECT AVG(`salary`) FROM `employee`; SELECT SUM(`salary`) FROM `employee`; -- 总和 SELECT MAX(`salary`) FROM `employee`; -- 最大 SELECT MIN(`salary`) FROM `employee`; -- 最小
-- wildcards 万用字元 % 代表多个字元 , _ 代表一个字元
-- 1 取得电话号码位数是 33 的客户 SELECT * FROM `client` WHERE `phone` LIKE '%33'; -- 2 取得姓艾的客户 SELECT * FROM `client` WHERE `client_name` LIKE '旺%'; SELECT* FROM `client`; -- 3 取得生日在12 月的 员工 SELECT * FROM `employee` WHERE `birth_date` LIKE '_____12-%';
-- UNION 联集
-- 1 员工名字 union 客户名字 SELECT `name` FROM `employee` UNION SELECT `client_name` FROM `client`; -- 联集 上下两个搜寻的值 类型要对应,且 数量要相同 -- 2 员工id + 员工名字 union 客户id + 客户名字 SELECT `emp_id` AS `total_id`, `name` AS `total_name` -- AS 替换原有的名字显示 FROM `employee` UNION SELECT `client_id`, `client_name` FROM `client`; -- 3 员工薪水 union 销售金额 SELECT `salary` FROM `employee` UNION SELECT `total_sales` FROM `works_with`;
-- join 连接
-- 取得所有部门经理的名字 SELECT * FROM `employee` LEFT JOIN `branch` -- LEFT 意思是左边的表格不用条件不用成立也可以回传资料,但右边的符合条件才行 -- FROM `employee` RIGHT JOIN `branch` -- RIGHT 意思是右边的表格不用条件不用成立也可以回传资料,但左边的符合条件才行 ON `emp_id` = `manager_name`;
-- subquery 子查询
-- 1 找出研发部门的经理名字 SELECT `name` FROM `employee` WHERE `emp_id` =( SELECT `manager_id` FROM `branch` WHERE `branch_name` = '研发' ); -- 2 找出对单一位客户销售金额超过 50000 的员工名字 SELECT `name` FROM `employee` WHERE `emp_id` IN( -- 使用 IN 是因为结果不止一个 SELECT `emp_id` FROM `works_with` WHERE `total_sales` > 50000);
参考:Josn.com