一、SQL概要
1.什么是SQL,SQL是結(jié)構(gòu)化查詢語言,面向數(shù)據(jù)庫,使我們有能力訪問數(shù)據(jù)庫。
2.DDL
2.1定義:
數(shù)據(jù)定義語句 ,data definition language
2.2主要操作
1.CREATE :創(chuàng)建表
2.DROP:刪除表
3.ALTER:修改表屬性
3.DML
3.1定義:
data manipulation language 數(shù)據(jù)操作語言 ,主要用來操作數(shù)據(jù)庫里面的數(shù)據(jù)
3.2主要操作:
增刪改查
insert:增,往數(shù)據(jù)庫插入數(shù)據(jù)
delet:刪,刪除記錄 ,慎用
update:改,修改表中已有的記錄
select:查,查數(shù)據(jù)庫
3.3操作對(duì)象是行數(shù)據(jù)
二、如何查詢(按列)
//查詢emp表所有東西
select *
from emp
//如果想查詢一部分列呢?
//empno,ename,job,sal是列名
select empno,ename,job,sal
from emp
//四則運(yùn)算 可以對(duì)數(shù)字類型,日期類型,數(shù)字類型字符串進(jìn)行運(yùn)算
select empno,ename,sal*12+300*12
from emp
三、如何查詢(按行)+where
1.使用where字句 限定條件
select empno,ename,job.sal
from emp
where sal>1500 and (job='SALESMAN' or job='CLERK')
//關(guān)系
> < = != <= >=
//范圍
between and
//是否空
is null
is not null
//判斷
in
not in
//模糊查詢
like
not like
例子://查詢名字包含S的員工
select *
from emp
where ename like '%S%'
//邏輯運(yùn)算
and or
四、如何排序(order by)
默認(rèn)升序ASC,指定降序需要寫DESC
select ename,job,sal
from emp
where empno='10'
order by sal DESC
五、一些函數(shù)(方法)
1.時(shí)間函數(shù)
now() curdatetime()
2統(tǒng)計(jì)行數(shù)
count(*)
注意 如果函數(shù)的參數(shù)是列名,不會(huì)統(tǒng)計(jì)null的行數(shù)
六、如何分組(group by)+having
select *
from emp
where job!='SALESMAN'
group by depno,job having sum(sal)>4000
order by sum(sal)
七、如何分頁(limit)
select *
from emp
limit 0,10 //0是起始值,也就是索引,10是偏移量,也就是返回條數(shù)
例子:返回4行,9表示從表的第10行開始
SELECT *
FROM emp
LIMIT 4 OFFSET 9
-- 等價(jià)于 select * from Emp limit 9,4
八、多表查詢
select depno,ename,job,sal
from emp left join dept on emp.deptno=dept.deptno
//from emp left join dept using(deptno)
where
group by having
order by desc
1.產(chǎn)生笛卡爾積問題
2.外連接多表查詢,使用left join 左外連接,on、using 使用時(shí) 關(guān)聯(lián)字段名字需要一樣
九、除了查詢 還有增刪改
//如何增加數(shù)據(jù)
insert into emp(ename,job,sal) values ('kim','itman',10000)
//如何刪除跑路()
delete
//一般開發(fā)用假刪除:在表中添加一列 用于表示是否刪除, 在查詢數(shù)據(jù)加上改條件 (通用字段)
//如何修改
update emp set job='SALESMAN',sal=1000 where ename='sb'
十、如何創(chuàng)建表
create table emp(
列名 類型 約束
列名 類型 約束
)
有哪些類型?
整型:
tinyint int
浮點(diǎn)型:
float double decimal (價(jià)格精確數(shù)字)
字符串:
varchar(255) char(11) text 文檔
時(shí)間:
timestamp 時(shí)間戳
十一、約束
主鍵約束
行級(jí)約束
create table 表名(
ID int primary key auto_increment,
name varchar(255)
)
表級(jí)約束
create table primary(
ID int auto_increment,
name varchar(255),
constraint PK_ID primary key(id)
)
外鍵約束(如何創(chuàng)建外鍵)
主表的主鍵作為從表的外鍵
行級(jí)添加
create table 表名(
列名 類型,
列名 類型 references 主表(主表列)
)
表級(jí)添加
create table 表名(
列名 類型 主鍵 自增,
列名 類型,
constraint fk_表名_外鍵字段名 foreign key(列名) reference 主表(參考)
)
不能跨數(shù)據(jù)庫建立約束
唯一約束
create table 表名(
UID int primary key auto_increment,
name varchar(255),
is_del int ,
constraint UK_UQ_name unique(name),
)
默認(rèn)以及非空約束(default null)
create table t_other(
oid int primary key auto_increment
name not null,
is_del int default 0
)
十二、索引
create index 索引名 on 表名(列名)
create index idx_user_name on user(name)
# 查看索引
SHOW INDEX FROM user
十三、子查詢
就是在查詢中嵌套查詢
示例代碼:
select d.deptno ,d.dname,d.loc
from dept d
select count(*),avg(sal)
from emp
group by deptno
select d.deptno ,d.dname,d.loc
from dept d,(select deptno, count(*),avg(sal)
from emp
group by deptno) temp
where d.deptno = temp.deptno