數(shù)據(jù)庫(kù)
1. 查詢(xún)(select)
條件:
- 不等于:< > 或 !=
格式:
select 字段1,字段2,...from 表名 where 條件1 連接符 條件2;
例:展示所有的查詢(xún)結(jié)果
SELECT * FROM gy_student_chenjl;
2. 模糊查詢(xún) (like)
只對(duì)字符串類(lèi)型的字段進(jìn)行模糊查詢(xún):varchar,char
-
通配符:
%? 代表0-n個(gè)任意字符
_ ??代表1個(gè)任意字符
格式:
SELECT * FROM 表名 WHERE 字段名 LIKE '%目標(biāo)字符%';
例:查詢(xún)姓名中包含冬字的學(xué)生信息
SELECT * FROM customer WHERE name LIKE '%冬%';
3. 非 (not)
例: 查詢(xún)姓名中不包含冬的學(xué)生信息
SELECT * FROM customer WHERE customer_name NOT LIKE '%冬%';
4. in
格式:
-
單個(gè)字段
select * from 表名 where 字段名 in (值1,值2,...);
例: 查詢(xún)學(xué)生id 是77 88 99 111
SELECT * FROM customer WHERE customer_id IN (77,88,111);
-
多個(gè)字段
select * from 表名 where (字段1,字段2...) in ((值1,值2,...),(值1,值2,...)...);
例: 查詢(xún)年齡不為23且省份不是重慶或者年齡不為29且省份不是安徽的所有學(xué)生信息;
SELECT * FROM customer WHERE (age,province) NOT IN ((23,'重慶'),(29,'安徽'));
5. 排序(order by)
規(guī)則:
- 升序:asc
- 降序:desc
格式:
-
單字段排序
select * from 表名 order by 排序字段 排序規(guī)則;
例: 查詢(xún)出所有學(xué)生的信息并對(duì)年齡字段進(jìn)行升序排序
SELECT * FROM customer ORDER BY age ASC; -
多字段排序
select * from 表名 order by 排序字段1 排序規(guī)則,排序字段2 排序規(guī)則...;
例: 查詢(xún)出年齡大于19歲的所有學(xué)生并以年齡進(jìn)行降序排序,如果有年齡相同的,以序號(hào)升序排序
SELECT * FROM customer WHERE age > 19 ORDER BY age DESC,customer_id ASC;
6. 返回記錄(limit)
注意:
- limit只適用于MySQL中
- Oracle數(shù)據(jù)庫(kù)中用rownum
- SQLsever數(shù)據(jù)庫(kù)中用top
格式:
select * from 表名 limit n,m;
ps:n表示起始位置
???????m表示展現(xiàn)m條數(shù)據(jù)
???????數(shù)據(jù)庫(kù)中查詢(xún)結(jié)果是以0為起始序號(hào)
例: 查詢(xún)出年齡大于19歲的所有學(xué)生并以序號(hào)進(jìn)行降序排序取前10條記錄
SELECT * FROM customer WHERE age > 19 ORDER BY customer_id DESC LIMIT 0,10;
7. 去重(distinct)
格式:
select distinct 字段名 from 表名;
例: 查詢(xún)出所有學(xué)生的年齡并去重
SELECT DISTINCT age FROM customer;
8. 分組(group by)
聚合函數(shù):
- 統(tǒng)計(jì):count()
- 求和:sum()
- 平均:avg()
- 最大:max()
- 最?。簃in()
格式:
select 分組字段,統(tǒng)計(jì)函數(shù) from 表名 group by 分組字段;
例: 統(tǒng)計(jì)出男生和女生的人數(shù)
SELECT sex,COUNT(sex) FROM customer GROUP BY sex;
9. 過(guò)濾(having)
ps:對(duì)聚合函數(shù)過(guò)濾需要使用having
???????普通過(guò)濾用where
格式
select 分組字段,聚合函數(shù) from 表名 group by 分組字段 having 過(guò)濾條件;
例: 統(tǒng)計(jì)出選修人數(shù)少于2人的課程
SELECT cno,COUNT() FROM scores GROUP BY cno HAVING COUNT() < 2;
10. 增
-
插一行
insert into 表名 (字段1,字段2,...) value (值1,值2,...);
例: 新增一個(gè)學(xué)生,學(xué)生信息 小張,生日 2018-01-01,性別女
INSERT INTO Student (id,name,birth,sex) VALUE ('22','小張','2018-01-01','女'); -
插1-n行
insert into 表名 (字段1,字段2,...) values (值1,值2,...),(值1,值2,...);
例: 新增兩個(gè)學(xué)生,學(xué)生信息 小張,生日 2018-01-01,性別女,小明,生日 2018-01-02,性別男
INSERT INTO Student (id,name,birth,sex) VALUE ('22','小張','2018-01-01','女'),('23','小張','2018-01-02','男'); -
擴(kuò)展:
①把數(shù)據(jù)從一張表備份到另一張表中
insert into 目標(biāo)表 select * from 數(shù)據(jù)源 where 條件
ps:兩張表的結(jié)構(gòu)必須完全相同
例:將score_112表備份到score_111表中
INSERT INTO score_111 SELECT * FROM score_112 WHERE s_id = '01';
insert into 目標(biāo)表 (字段名1,字段名2,...) select (字段1,z字段2) from 數(shù)據(jù)源 where 條件
ps:不限制表結(jié)構(gòu)
②建表:create table
③建數(shù)據(jù)庫(kù):create database
(db:數(shù)據(jù)庫(kù) ????? dba(administrator):數(shù)據(jù)庫(kù)管理員)
11. 刪
ps: delete from 表名 清空整張表 但是結(jié)構(gòu)還在
- delete from 表名 where 條件
例: 刪除學(xué)號(hào)為110的學(xué)生信息
DELETE FROM student WHERE sno = '110'; - 連表刪除(不能使用表別名)
delete 要?jiǎng)h除的表名1,表名2 from 表名1,表名2 where 多表連接 and 條件
例: 請(qǐng)刪除Betty的記錄
DELETE Student,Achievement FROM Student JOIN Achievement ON Student.ID = Achievement.ID WHERE Student.Name = 'Betty'; - 擴(kuò)展:
①清表:delete from 表名(只清除表數(shù)據(jù),不清除表結(jié)構(gòu))
??????????????truncate table 表名(表全部清空)
②刪表:drop table
③刪庫(kù):drop database
12. 改
格式:
- update 表名 set 字段名1 = 字段值1,字段名2 = 字段值2 where 條件
例:將學(xué)號(hào)為110的性別改為男
UPDATE student SET ssex = '男' WHERE sno ='110'; - 擴(kuò)展:
改表結(jié)構(gòu):alter
13. 備份
-
備份到臨時(shí)表:
①條件不成立(where 1 = 2),則只備份表結(jié)構(gòu)
create table 臨時(shí)表名 as select * from 源表名 where 1 = 2;
②條件成立(where 1 = 1),則備份所有表數(shù)據(jù)
create table 臨時(shí)表名 as select * from 源表名 where 1 = 1; - 備份成SQL腳本,右擊表-->導(dǎo)出/備份-->SQL
- 備份成CSV文件
14. 多表關(guān)聯(lián)
嵌套
select * from 表名 where 字段名 = (select 字段名 from 表名 where 條件)
例:查詢(xún) 比王芳操作系統(tǒng)成績(jī)高的所有學(xué)生
SELECT DISTINCT a.sname FROM student a,score c WHERE a.sno = c.sno AND c.degree > (SELECT c.degree FROM student a,course b,score c WHERE a.sno = c.sno AND b.cno = c.cno AND a.sname = '王芳' AND b.cname = '操作系統(tǒng)');where 關(guān)聯(lián)(笛卡爾乘積)
select * from 表1 別名a,表2 別名b,表3 別名c where a.字段名 = b.字段名 and b.字段名 = c.字段名 連接符(and/or) 條件內(nèi)連接(join on 或 inner join on)
select * from 表1 別名a join 表2 別名b on a.字段名 = b.字段名 join 表3 別名c on b.字段名 = c.字段 where 條件
例: 查詢(xún)成績(jī)>85分的學(xué)生的姓名
select a.Name from Student a join Achievement b on a.ID = b.ID where b.Mark > 85;左連接(left join)
select * from 表1 別名a left join 表2 別名b on a.字段 = b.字段 where 條件右連接(right join)
select * from 表1 別名a right join 表2 別名b on a.字段 = b.字段 where 條件全連接(full join)
select * from 表1 別名a full join 表2 別名b on a.字段 = b.字段 where 條件
