1.顯示所有數(shù)據(jù)庫(kù)
show databases;//展示所有數(shù)據(jù)庫(kù)
2,創(chuàng)建數(shù)據(jù)管理系統(tǒng)
create database 數(shù)據(jù)庫(kù)名字;
3朗恳,刪除數(shù)據(jù)庫(kù)
drop database 數(shù)據(jù)庫(kù)名字鳍烁;
4,使用數(shù)據(jù)庫(kù)
use 數(shù)據(jù)庫(kù)名字敬扛;-->database changed;
5,創(chuàng)建數(shù)據(jù)表
creat table 表名(字段名 字段類型(約束),字段名2 字段類型(約束),)晰洒;
字段類型有:int(Integer) 整數(shù)型;
float/double 單精度/雙精度浮點(diǎn)型
date 日期類型
datetime 日期時(shí)間類型
char 定長(zhǎng)字符串
varchar 可變長(zhǎng)度字符串
text 大文本對(duì)象啥箭,可用于存儲(chǔ)超長(zhǎng)字符串
bold 二進(jìn)制大對(duì)象谍珊,可用于存儲(chǔ)圖片等二進(jìn)制數(shù)據(jù)
6,查看創(chuàng)建的數(shù)據(jù)表
show tables;//僅僅是表名的展示急侥;
7砌滞,查看表的結(jié)構(gòu)
desc 表名//desc student;
8,修改數(shù)據(jù)表名稱
alter table 表名 rename 新表名;//alter table student rename stu;
9,刪除數(shù)據(jù)表
drop table 表名坏怪;//delete table stu;
10,添加表字段
alter table 表名 add column 字段名 字段類型;//alter table student add column phone varchar(20);
添加帶默認(rèn)值的字段名
alter table student add column sex varchar() default'男';
11贝润,修改表字段類型
alter table 表名 modify 字段名 修改的類型;//alter table student modify sex varchar(10);
12,刪除表字段
alter table 表名 drop 字段名//alter table student drop phone;
13,約束 NOT NULL:非空約束;
UNIQUE:唯一約束;
PRIMARY KEY:主鍵铝宵,唯一標(biāo)識(shí)該記錄打掘,非空且唯一;
FOREIGN KEY:外鍵华畏,指定該記錄從屬的主表記錄;
添加非空約束和主鍵;
主鍵添加:alter table student add column id int primary key;
14,創(chuàng)建表數(shù)據(jù)時(shí)設(shè)置主鍵自增 尊蚁,以及名字非空亡笑;
create table student(
id int primary key auto_increment,
name varchar(20) not null,
age int,
birthday date,
xuefen float(3,1),//3代表一共有三位,1代表小數(shù)點(diǎn)后的位數(shù).);
15,索引:索引的作用類似于書(shū)的目錄横朋,一個(gè)表可以有多個(gè)索引仑乌,每個(gè)索引都可用于加速該列的查詢速度
創(chuàng)建索引 creat index 索引名稱 on 表名(字段名);
create index nameindex on student(name);//創(chuàng)建指向student name
刪除索引 drop index 索引名稱 on 表名;
create index nameindex on student;
劣勢(shì):當(dāng)數(shù)據(jù)進(jìn)行修改時(shí)叶撒,索引也需要進(jìn)行更新绝骚,較為麻煩,同時(shí)索引信息需要一定的磁盤(pán)空間祠够。
16,中文亂碼需要鍵入 set names gbk;//解決名字亂碼問(wèn)題压汪;
17,插入數(shù)據(jù) insert into 表名(字段名1,字段名2) values(數(shù)據(jù)1古瓤,數(shù)2);
不帶自定義id的插入學(xué)生信息:
insert into student(name,age,birthday,xuefen) values('科比',39,'1978-8-30',1.8);
展示輸入的學(xué)生所有信息:
select * from student;
展示表名中的部分學(xué)生信息:
select age,xuefen from student;
自帶id的插入學(xué)生信息:
select into student(id,name,age,birthday,xuefen) values(5,'杜蘭特',29,'1988-9-29',1.9);
若此時(shí)再進(jìn)行不帶自定義id的形式插入學(xué)生信息止剖,則會(huì)從自帶id的后面進(jìn)行自增長(zhǎng)
insert into student(name,age,brithdaty,xuefen) values('艾弗森',42,'1975-6-7',3.0);
若輸入的順序和展示出來(lái)表的字段的順序相同,可省略字段部分落君;
insert into student values(2,'湯普森','27','1990-2-8','3.5');
18,修改數(shù)據(jù) update 表名 set 字段1=值1穿香,字段2=值2,where條件绎速,
沒(méi)有添加where條件的會(huì)修改全部記錄皮获,
uodate student set sex=男;
添加where 一般指定id;
update student set xuefen=3.0 where id=4;
19,刪除數(shù)據(jù) delete from 表名 where 條件纹冤;//以行為單位進(jìn)行整行刪除
delete from student where id=7;
20,查詢數(shù)據(jù){單表查詢洒宝,聯(lián)合查詢};
單表查詢:?jiǎn)螚l件查詢萌京,去重查詢雁歌,查詢條件中的運(yùn)算符,函數(shù)查詢知残,分組查詢靠瞎,分頁(yè)查詢,結(jié)果排序
20.1 單條件查詢:select * from 表名求妹;(全部元素都會(huì)顯示出來(lái));
select * from student;
展示特殊字段 select 字段1乏盐,字段2 from 表名
select name,age from student;
查詢特殊條件的 select * from 表名 where 條件;
select * from student where age>30;
查詢多個(gè)特殊條件的制恍;條件1 and 條件2丑勤;//與
條件2 or 條件2;//或
20.2 去重查詢:可以使用distinct關(guān)鍵字從查詢結(jié)果中消除重復(fù)數(shù)據(jù)吧趣;
select distinct 字段1法竞,字段2 from 表名;
select distinct name,xuefen from student;name和學(xué)分都重復(fù)才會(huì)去除耙厚;
20.3 查詢條件中的運(yùn)算符;比較運(yùn)算符=岔霸,!=,<> ,>,>=,<,<=;
邏輯運(yùn)算符 and:與 or 或 not:非 優(yōu)先級(jí) not>and>or
優(yōu)先級(jí)的檢測(cè)薛躬;
select * from student where 1<>1 and 1=1 or 1=1 or 1=1;
select * from student where 1=1 or 1=1 or 1=1 and 1<>1;
使用between and
between 16 and 20 ;//可以取到16 和20,這兩個(gè)邊界值呆细。
使用in運(yùn)算符
select * from student where age in(10,30,40,29);
跟表中的年齡進(jìn)行比對(duì)型宝,看有沒(méi)有能夠匹配相等的,有絮爷,則顯示
使用like運(yùn)算符
模糊運(yùn)算符趴酣,像
select * from student where name like '%張';
'%'代表無(wú)限個(gè)字符 '%張'是指以張結(jié)尾的名字
'%張%'中間有張字的名字 '張%'是指以張開(kāi)頭的名字
'_張'以'張'字結(jié)尾的三個(gè)字的名字,''代表一個(gè)字符坑夯;
使用is null運(yùn)算符
20.4 函數(shù)查詢
max:求最大值,min:求最小值,avg:求平均值,sum:求和,count:求數(shù)量
case 函數(shù)岖寞,類似于switch;
select max(age) from student;//選擇最大年齡柜蜈;
最大年齡對(duì)應(yīng)的名字
select age,max(age) from student;
//展示max(age)對(duì)應(yīng)的所有信息仗谆;
//select max(age) from student-->返回的是一個(gè)最大年齡的表單
select * from student where age=(select max(age) from student);
count的應(yīng)用:
select count(1) from student;
case:的應(yīng)用
select * ,case
where age>30 then '老年人'
where age<30 then '中年人’
end
from student;
實(shí)例1:查詢所有大于平均年齡的學(xué)生記錄
//平均年齡 select avg(age) from student;
//select * from student when age>(select avg(age) from student);
20.5 分組查詢
group by 分組字段;
//案例:平均年齡按照男女性別分組
select avg(age) from student gronp by sex;
//顯示男女性別淑履,同時(shí)平均年齡按照男女性別分組
select age,avg(age) from student group by sex;
having 分組條件
//案例隶垮,顯示男女性別,同時(shí)平均年齡按照男女性別分組但是大于平均年齡的要小于3個(gè)
select sex avg(age) from student group by sex having count<3;
where 和having 的區(qū)別
where用于過(guò)濾行秘噪,having 用于過(guò)濾組狸吞,where 子句中不能使用組函數(shù),
having子句中可以使用組函數(shù)
20.6 分頁(yè)查詢 limit x,y;x代表下標(biāo)指煎,y代表個(gè)數(shù)
select * from student limit 0,2;起始下標(biāo)為0的位置顯示兩天信息蹋偏;
20.7 排序查詢 order by 字段//默認(rèn)是升序
select * from student order by age (asc);//默認(rèn)按年齡升序排列
select * from studnet order by age desc;//按年齡降序排列;
案例1:先按年齡升序排序贯要,再取出年齡最大的兩個(gè)
select * from student by age asc limit 0,2;
案例2:先按年齡升序排序暖侨,如果年齡相同再按學(xué)分降序排序
select * from student by age ase椭住,xuefen desc;
分組的順序優(yōu)先級(jí):
select * from student group by () having where order by limit;
21 關(guān)聯(lián)查詢
21.1 連接查詢
交叉連接崇渗,使用on子句的連接,左連接京郑,右連接宅广;
21.1.1 交叉連接
select * from student cross join class;
添加別名進(jìn)行交叉連接選擇
//用于挑選一個(gè)學(xué)生選擇一門(mén)課程時(shí)的展示數(shù)據(jù)
select * from student s cross join class c where s.kid=c.id;
//挑選所有選了某個(gè)課程的學(xué)生
select s.* from studnet s cross join class c where s.kid=c.id and c.classname="crossover";
21.1.2 on連接
select * from student s join class c on;
21.1.3 左連接
select * from student s left join class c on s.kid=c.id;
21.1.4 右連接
select * from student s right join class c on s.kid=c.id;
21.2 子查詢
1.出現(xiàn)在from語(yǔ)句后當(dāng)成數(shù)據(jù)表,
2.出現(xiàn)在where條件后作為過(guò)濾條件的值,
//案例查詢所有選擇某門(mén)課程中學(xué)生年齡最大的些举;
//所有選擇某門(mén)課程的學(xué)生
select * from student s join class c on s.kid=c.kid and classname="";
//篩選年齡最大的
先進(jìn)行排序再進(jìn)行分頁(yè)
select * from( select * from student s join class c on s.kid=c.kid and classname="") t
order by t.age desc limit 0,1;