我爱Java
DDL-操作数据库和表
**创建数据库** create database 数据库名称;
**查看数据库** show database;
**查看表** desc 表名;
**删除数据库** drop database 数据库名称;
**删除表** drop table 表名;
*备注 添加 if exits 可以判断是否存在
DML-对表中的数据增删改
创建表
create table 表名 (
列名 数据类型,
列名 数据类型,
...
列名 数据类型
);
添加数据
1. insert into 表名(列名,列名...) values(值1,值2 ....);
2. insert into 表名 values(值1,值2 ....);
3. insert into 表名(列名,列名...) values(值1,值2 ....),(值1,值2 ....);
4. insert into 表名 values(值1,值2 ....),(值1,值2 ....);
修改数据 update 表名 set 列1=值1,列2=值2,... [where 条件]
删除数据 delete from 表名 [where 条件];
备注 修改和删除的条件可有可无,不带条件会修改或删除所有数据
DQL-对表中的数据进行查询
基础查询
1.查询 select 字段 from 表名
2.去重 select distinct 字段 from 表名
3.起别名 取别名: select 列名 AS 别名,列名 AS 别名,… from 表名
说明:AS关键字可以省略不写。
条件查询
select 字段 from 表名 where 条件
排序查询
select 字段列表 from 表名 order by 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
正序 asc (默认),倒序 desc
聚合函数
select 聚合函数名(列名) from 表;
分组查询
--查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的
select 字段 from 表名 [where] group by 分组 [having 条件过滤];
select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*) > 2;
约束
概念:设置在列上的一种规则。
作用:限制添加到表中的数据,保证数据的正确性、有效性、完整性。
分类
非空约束
-- not null 保证所有数据中不能有null值
-- 创建表时添加非空约束
create table 表名(
列名 数据类型 NOT NULL
);
-- 建完表后添加非空约束
create table 表名 MODIFY 字段名 数据类型 NOT NULL;
-- 删除约束
create table 表名 modify 字段名 数据类型;
唯一约束
unique 保证列中的数据不会重复
-- 创建表时添加唯一约束
create table 表名(
列名 数据类型 unique [auto_increment]
--auto_increment:不指定值时自动增长
);
create table 表名(
列名 数据类型,
...
[constraint][约束名称]unique(列名)
);
-- 建完表后添加唯一约束
alter table 表名 MODIFY 字段名 数据类型 unique;
-- 删除约束
ALTER TABLE 表名 DROP INDEX 字段名;
主键约束
primany key 主键是一行数据的唯一标识,要求非空且唯一
-- 创建表时添加主键约束
CREATE TABLE 表名(
列名 数据类型 PRIMARY KEY [AUTO_INCREMENT],
…
);
CREATE TABLE 表名(
列名 数据类型,
[CONSTRAINT] [约束名称] PRIMARY KEY(列名)
);
-- 建完表后添加主键约束
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
-- 删除约束
ALTER TABLE 表名 DROP PRIMARY KEY;
检查约束check 保证列中的值满足某一条件(MySQL不支持)
默认约束
default 保存数据时,未指定值则采用默认值
-- 创建表时添加默认约束
CREATE TABLE 表名(
列名 数据类型 DEFAULT 默认值,
…
);
-- 建完表后添加默认约束
ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;
-- 删除元素
ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;
外键约束
forreign key 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
数据库设计
多表关系
一对多 :在多的一方添加外键。
多对多:建立一张中间表,设置两个外键,分别指向另外两个表
一对一:外键建立在任一表中皆可
多表查询
内连接
-- 隐式内连接
SELECT 字段列表 FROM 表1,表2… WHERE 条件;
-- 显示内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;
外连接
-- 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件 LEFT [OUTER] JOIN 表3 ON 条件…;
-- 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件 RIGHT [OUTER] JOIN 表3 ON 条件…;
子连接
即嵌套链接
-- 第一步: 先查询出来 猪八戒的工资
select salary from emp where name = '猪八戒'
-- 第二步: 查询工资高于猪八戒的员工信息
select * from emp where salary > 3600;
-- 第三步: 第二步中的3600可以通过第一步的sql查询出来,所以将3600用第一步的sql语句进行替换
select * from emp where salary > (select salary from emp where name = '猪八戒');