20170623-sql複習
阿新 • • 發佈:2018-12-22
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)