本文为博主在java实训时记下的sql基础笔记,主要为个人备份查找用,如果能帮助到大家更好,如有错误还望指出
DDL
数据库
创建数据库
create database if not exists 数据库名 character set UTF8
显示所有数据库
show databases
选择数据库
use 数据库名
删除数据库
drop database if exists 数据库名
表
显示所有表
show tables
创建表:
- 数据类型:
int – 整型
double – 浮点型*(m,n)m长度,n位小数*
char – 定长字符串
varchar – 不定长字符串 - 日期:
date 年月日
time 时分秒
datetime 年月日时分秒
timestamp 年月日时分秒,范围更小,支持时区
create table 表名(
列名 类型
id int,
sal double(5,2),
name varchar(50),
role char(1),
birthday datetime
);
显示表的创建语句:
show create table 表名
显示表结构:
desc 表名
修改表结构:
alter table 表名(前缀)
- 添加列:
add 列名 列类型
- 修改列类型:
modify 列名 类型
- 修改列名:
change 原列名 新列名 列类型
- 删除列:
drop 列名
- 修改表名:
rename to 新表名
DML:数据操作语言
insert into 表名 values(,,,)
delete from 表名
truncate table 表名
update 表名 set 列名 列值, ...
DQL:数据查询语言
- 查询指定列
select 列名
- 条件查询
where
运算符
between min and max
- 去掉重复值
distinct 列名
- 排序
- 升序
order by 列名 asc
- 降序
order by 列名 desc
- 模糊查询
like
_
:任意单个字符%
:任意0~n个字符
- 聚合函数
count(列名)
:不包含列值是null的行数sum
avg
max
min
limit m,n
:从第m+1行开始,共显示n行
- 查询薪资最高的员工
select * from emp
order by sal desc
limit 0,1
- 分组查询
group by
- 建议不要查询单列记录,应该查询组信息
- 查询每个工作有多少人
select job, count(*) from emp group by job
- 筛选包含’a’的job,不能用where
having job like '%a%'
约束
- 主键约束
primary key
- 主键自增长
auto_increment
- 非空约束
not null
- 唯一约束
unique
- 外键约束
foreign key
概念模型
在创建软件项目时,把实体抽象出来。
user, question
java–>java类
数据库–>表–关系模型
使用外键,产生关系:
一对多 – 外键在多的那张表,
一对一 –
多对多
多表查询
- 方言
查询所有的雇员信息,以及对应的部门名称
select e.*, d.dname from emp e, dept d where e.deptno=d.deptno;
- 标准查询语言
select e.*, d.dname from emp e inner join dept d on e.deptno=d.deptno
- 右(左)外连接:把右(左)边的表作为主表,主表的所有信息都会被查询出来
select e.*, d.dname from emp e right outer join dept d on e.deptno=d.deptno
- 子查询:在from或者where后可以使用另一个查询的结果作为查询源或者条件
select * from emp where sal=(select max(sal) from emp)