1. 程式人生 > >20170623-sql複習

20170623-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:資料查詢語言

  1. 查詢指定列 select 列名
  2. 條件查詢 where
  • 運算子
  • between min and max
  1. 去掉重複值 distinct 列名
  2. 排序
  • 升序 order by 列名 asc
  • 降序 order by 列名 desc
  1. 模糊查詢 like
  • _:任意單個字元
  • %:任意0~n個字元
  1. 聚合函式
  • count(列名):不包含列值是null的行數
  • sum
  • avg
  • max
  • min
  1. limit m,n:從第m+1行開始,共顯示n行
  • 查詢薪資最高的員工
select * from emp
order by sal desc
limit 0,1
  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類
資料庫–>表–關係模型
使用外來鍵,產生關係:
一對多 – 外來鍵在多的那張表,
一對一 –
多對多

多表查詢

  1. 方言
    查詢所有的僱員資訊,以及對應的部門名稱
select e.*, d.dname from emp e, dept d where e.deptno=d.deptno;
  1. 標準查詢語言
select e.*, d.dname from emp e inner join dept d on e.deptno=d.deptno
  1. 右(左)外連線:把右(左)邊的表作為主表,主表的所有資訊都會被查詢出來
select e.*, d.dname from emp e right outer join dept d on e.deptno=d.deptno
  1. 子查詢:在from或者where後可以使用另一個查詢的結果作為查詢源或者條件
select * from emp where sal=(select max(sal) from emp)