簡單SQL語句,從刪庫到跑路
阿新 • • 發佈:2019-02-04
建立資料庫:
Create database 資料庫名
刪除資料庫:
drop database 資料庫名
建立表:
Create table 表名(欄位1 primary key auto_increment,欄位2,欄位3)欄位包含:欄位1為主鍵:(欄位 型別 識別符號為primary key,auto_increment為自動增長)
刪除表:
drop table 表名
一對一關係:
建立表:
表1名:county
create table county *(id int primary key auto_increment ,name cahr(10),language char(10));
表2名: president
create table president(id int primary key auto_increment,name char(10),sex char,f_country_id int);
為president表新增外來鍵約束,這個外來鍵的值來自於country表中的主鍵
Alter table president add constraint foreign key(f_country_id)references country(id)on delete cascade;
on delete cascade:刪除country時刪除相應的president
on delete set null:刪除country時刪除相應的president為null
on delete no action:如果country中某條記錄被president指向,那麼刪除country報錯,即不能刪除。
注:on delete cascade 表示class表中的記錄刪除時,stu2表中的外來鍵相關聯的記錄也會被刪除
一對多的關係:
1、 建立class表
create table class(classname char(10),primary key,headteacher char(10));
2、 建立stu2表
Create table stu2(num int primary key auto_increment,name char(10),age int,f_classname char(10));
alter table stu2 add constant foreign key(f_classname)reference class(classname)on delete set null;
注:delete set null 表示class表中的記錄刪除時,stu2表中外來鍵相關聯的外來鍵值被設為null。
多對多的的關係:
1、 建立teacher表
crete table teacher(id int primary key auto_increment,name char(10));
2、 建立stu表
create table stu(id int primary key auto_increment,name char(10));
3、 建立一箇中間表
create table middle(id int primary key auto_increment,f_teacher_id int ,f_stu_id int);
4、 為中間表設定第一外來鍵,這個外來鍵的值來自於teacher表
alter table middle add constraint foreign key(f_teacher_id)references teacher(id)on delete no action;
5、 為中間表設定第二外來鍵,這個外來鍵的值來自於stu表
alter table middle add constant foreign key(f_stu_id)references stu(id) on delete no action;
注:on delete no action表示stu表中的記錄不能刪除
新增資料:
根據表中的全部欄位新增資料
Inset into 表名(欄位1,欄位2,欄位3)values(值1,值2,值3);
這種方式要求新增表中全部的值才可以新增資料
Insert into 表名 values(值1,值2,值3);
根據表中的某些欄位新增資料
Inset into 表名(欄位2)values(值2);
刪除資料
刪除欄位1的那條記錄
Delete from 表名 where 欄位1=值1;
刪除欄位1並且欄位2=值2的那條記錄
Delete form 表名 where 欄位1=值1and 欄位2=值2;
刪除欄位1=值2或者欄位1=值3的兩條記錄
Delete form 表名where 欄位1= 值2 or 欄位1= 值3;
刪除欄位1=值1以及欄位1=值3的兩條記錄
Delete from 表名 where 欄位1 in(值1,值3);
刪除id不等於1、2、3的記錄;
Delete from 表名 where id not in(1,2,3);
刪除id>35的所有記錄,不包括35
Delete from 表名 where id>35;
刪除id>30並且id<34的記錄,不包括30、34
Delete from 表名 where id>30 and id<34;
刪除id<2或者id>35的所有記錄,不包括2、35
Delete from 表名 where id<2 or id>35;
修改資料庫
將sex=’m’的全部記錄修改為’男’
Update 表名 set sex=’男’where sex=’m’;
將id=30那條記錄的sex改為‘女’
Update 表名 set sex=’女’where id=30;
將id=29那條記錄的cardno改為‘2016’,name改為‘(●’◡’●)’
Update 表名 set cardno=‘2016’,name=‘(●’◡’●)’where id=29;
查詢資料
查詢表裡的所有資料
Select * from 表名;
查詢student表中id>20的所有記錄的資料
Select * from student where id>20;
查詢表中所有欄位2的資訊
Select 欄位2 from 表名;
查詢表中欄位2,欄位4,欄位6的資訊
Select 欄位2,欄位4,欄位6 from 表名;
查詢id<10的name,sex,elective的欄位資訊
Select name,sex,elective from 表名 where id<10;
多表查詢語句
1、 查詢各班的學生資訊:笛卡兒積
方式1:
select t_class.C_NAME,t-stu.S_NAME,t_stu_S_SEX,t_stu.S_MONEY
from t_class,t_stu;
方式2:
select c.C_NAME,s.S_NAME,s.S_SEX,s.S_MONEY
from t_class c,s_stu s
2、 查詢各班的學生資訊,當t_stu表中的C_ID等於t_class表中的C_ID時,表示該班級的學生
select c.C_NAME,s.S_NAME,s.S_SEX,s.S_MONEY
from t_class c,t_stu s
where c.C_ID=s.C_ID
3、 查詢班級名稱、學生姓名、性別、繳費、相同班級的要放在一起,姓名根據字典順序排列。
select c.C_NAME,s.S_NAME,s,s.S_SEX,s.S_MONEY
from t_class c,t_stu s
where c.C_ID=s.C_ID
order by c.C_ID,s.S_ID
4、 查詢各班的班級名稱和人數(通過班級名稱進行分組查詢)
select c.C_NAME,count(*) as 人數
from t_class c,s_stu s
where s.C_ID=c.C_ID
group by c.C_ID
查詢各班名稱和人數,但人數必須小於2,人數多的放在前面
注:group by 用於分組,
Having用於分組後進行條件過濾,
Order by用於選取相應的欄位進行排序,
desc表示倒序
查詢沒有人員的班級
注:distinct表示返回表中不同記錄的條數,就是返回不同記錄的欄位值
select * from t_class c
where c.C_ID not in(select distinct s.C_ID from t_stu s where s.S_ID>3);
等價於:
select * from t_class c where c.C_ID not in(21);
分組查詢語句:
根據name欄位進行分組查詢,並統計每一組的人數
select count(*) from student group by name;
根據name欄位查詢,並得到每一個組的人數
select name,count(*)as 人數 from student group by name;
根據name欄位查詢,並得到每一組的人數以及每一組中id的最大值
select name,count(*) as 人數, max(id) from student group by name;
根據sex欄位進行查詢,並統計每一組的人數
select sex,count(*) as 人數,min(id) from student group by sex;
根據sex進行分組查詢,並只對id等於3、28、30的3條記錄進行分組查詢
select sex,count(*)from student where id in(3,28,30) group by sex;
根據sex進行分組查詢,並只對id>20的所有記錄進行分組查詢
select sex ,count(*)from student where id>20 group by sex desc;