SQL
SQL简介
SQL通用语法
SQL分类
DDL
操作数据库
show databases;
create database db1;
drop database db1;
use db1;
select database();
操作表
show tables;
desc func;
创建表
create table tb_user(
id int,
username varchar(20),
password varchar(20)
);
数据类型
score double(5,2) 5指一共5位数,其中小数占2位.
date: 日期只含年月日,yyyy-MM-dd
tinyint类型代表一个字节,如果一个数字大小超过一个字节,则无法保存
mysql> create table student(
-> id int,
-> name varchar(10),
-> gender char(1),
-> birthday date,
-> score double(5,2),
-> email varchar(64),
-> tel varchar(15),
-> status tinyint
-> );
删除表
drop table tb_user;
drop table if exists tb_user;
修改表
alter table student rename to stu;
alter table stu add address varchar(50);
alter table stu modify address char(50);
alter table stu change address addr varchar(30);
alter table stu drop addr;
DML
添加数据
1.指定列添加数据
insert into stu(id,name) values(1,'张三');
INSERT INTO stu ( id, NAME, gender, birthday, score, email, tel, STATUS )
VALUES
( 2, '李四', '男', '1999-11-11', 88.88, '20113317@qq.com', 21431314, 1 );
2.全部列添加数据
省略列名
INSERT INTO stu
VALUES
( 2, '李四', '男', '1999-11-11', 88.88, '20113317@qq.com', 21431314, 1 );
3.批量添加数据
INSERT INTO stu
VALUES
( 2, '李四', '男', '1999-11-11', 88.88, '20113317@qq.com', 21431314, 1 ),
( 2, '李四', '男', '1999-11-11', 88.88, '20113317@qq.com', 21431314, 1 ),
( 2, '李四', '男', '1999-11-11', 88.88, '20113317@qq.com', 21431314, 1 ),
( 2, '李四', '男', '1999-11-11', 88.88, '20113317@qq.com', 21431314, 1 );
修改数据
UPDATE stu
SET gender = '女'
WHERE
NAME = '张三';
删除数据
DELETE
FROM
stu
WHERE
NAME = '张三';
DQL
CREATE TABLE stu (
id INT,-- 编号
NAME VARCHAR (20),-- 姓名
age INT,-- 年龄
sex VARCHAR (5), -- 性 别
address VARCHAR (100),-- 地址
math DOUBLE (5, 2),-- 数学成绩
english DOUBLE (5, 2),-- 英语成绩
hire_date date-- 入学时间
);
INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date)
VALUES
(1,'码云',55,'男','杭州',66,78,'1995-09-01'),
(2,'马化腾',55,'女','深圳',66,48,'1895-02-01'),
(3,'马斯克',55,'男','香港',23,78,'1995-03-01'),
(4,'流白',55,'男','湖南',66,58,'1994-09-04'),
(5,'留情',55,'女','湖南',66,NULL,'1595-09-01'),
(6,'刘德华',55,'男','香港',76,78,'1695-09-02'),
(7,'张学友',55,'男','香港',64,28,'1795-09-05'),
(8,'德玛西亚',55,'女','南京',96,78,'1195-09-09');
基础查询
1.查询多个字段
2.去除重复记录
3.起别名
条件查询
基本的条件查询
需求
第四个第五个简单省略.
模糊查询
排序查询
聚合函数
分组查询
分页查询
x:当前页码
y:每页显示条数
起始索引:(x-1)*y
约束
约束
约束概念
基本约束
需求:
CREATE TABLE emp (
id INT, -- 员工id,主键且自增长
ename VARCHAR(50), -- 员工姓名,非空并且唯一
joindate DATE, -- 入职时间,非空
salary DOUBLE(7,2), -- 工资,非空
bonus DOUBLE(7,2) -- 奖金,如果没有奖金默认0
);
根据需求完成操作
CREATE TABLE emp (
id INT PRIMARY KEY auto_increment, -- 员工id,主键且自增长
ename VARCHAR(50) NOT NULL UNIQUE, -- 员工姓名,非空并且唯一
joindate DATE NOT NULL, -- 入职时间,非空
salary DOUBLE(7,2) NOT NULL, -- 工资,非空
bonus DOUBLE(7,2) DEFAULT 0-- 奖金,如果没有奖金默认0
);
外键约束
CREATE TABLE dept(
id int PRIMARY key auto_increment,
dep_name VARCHAR(30) NOT NULL,
addr VARCHAR(30) NOT NULL
);
CREATE TABLE emp (
id INT PRIMARY KEY auto_increment, -- 员工id,主键且自增长
ename VARCHAR(50) NOT NULL UNIQUE, -- 员工姓名,非空并且唯一
joindate DATE NOT NULL, -- 入职时间,非空
salary DOUBLE(7,2) NOT NULL, -- 工资,非空
bonus DOUBLE(7,2) DEFAULT 0,-- 奖金,如果没有奖金默认0
dep_id int,
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
);
数据库设计
多表查询
内连接
-- 内连接
-- 隐式内连接
-- 查修emp的name,salary,dept的dep_name
SELECT emp.ename,emp.salary,dept.dep_name FROM emp,dept WHERE emp.dep_id = dept.id;
-- 表起别名(as省略)
SELECT t1.ename,t1.salary,t2.dep_name FROM emp t1,dept t2 WHERE t1.dep_id = t2.id;
----------------------------------------------------------------------------------
-- 显示内连接
SELECT * FROM emp INNER JOIN dept on emp.dep_id = dept.id;
-- INNER可省略
SELECT * FROM emp JOIN dept on emp.dep_id = dept.id;
外连接
-- 外连接
-- 左外连接
-- 查询emp所有数据和对应的部门信息
SELECT * FROM emp left JOIN dept on emp.dep_id = dept.id;
-- 右外连接
-- 查询dept所有数据和对应的员工的信息
SELECT * FROM emp RIGHT JOIN dept on emp.dep_id = dept.id;
子查询
事务
事务简介