一、建立數據庫數據庫
create DATABASE 數據庫名 CHARSET=utf8;
c#
二、使用數據庫bash
use 數據庫名;
函數
數據庫查看、使用、建立、刪除spa
show databases; 查看全部的數據庫
code
select database(); 查看當前所在數據庫
io
drop database 數據庫名; 刪除數據庫
table
三、建表語句class
create TABLE 表名(
sid int PRIMARY KEY,
sname varchar(12) NOT NULL,
score int);
複製代碼
約束語句:test
①設置默認值:DEFAULT '默認值' ②設置非空:NOT NULL ③設置惟一:UNIQUE(字段名) ④設置主鍵:PRIMARY KEY(字段名) ⑤設置外鍵:FOREIGN KEY(字段名) REFERENCES 表名(字段名) ⑥設置CHECK約束:CHECK(字段名 BETWEEN xx AND xx)
四、修改數據表
①添加字段 alter table 表名 add 列名 類型;
②修改字段(主要修改列的類型及約束,不從新修改列名)
alter table 表名 modify 列名 類型及約束;
③修改字段(重命名)
alter table 表名 change 原名 新名 類型及約束;
④修改表(刪除字段)
alter table 表名 drop 列名;
五、刪除表
drop table 數據表;
六、重命名錶
rename table 舊錶名 to 新表名;
一、插入數據
①所有數據
insert into 表名 values(所有列的值);
②部分數據
insert into 表名(字段1,字段2...) values (值1,值2...)
③多條數據
insert into 表名 values (所有列的值),(所有列的值),(所有列的值);
二、刪除數據
注意:在修改或者刪除數據的時候必定腰指定條件,鬥則可能形成全部數據被污染或者清空
delete from 表名 where 條件
``
例如:delete from student where id=1;
三、修改數據
update 表名 set 字段名=新值 where 條件
例如:update student set sname='李四' where id=1;
四、清空數據(將全表清空掉嗎而且自增主鍵從1開始)
truncate 表名;
五、聚合函數
where子句中不能使用聚合函數,由於聚合函數對結果集進行操做,而where子句運行時尚未篩選出結果集,因此此時使用聚合函數會報錯;與where相比,having是用來篩選分組的,跟在group by以後,因此having子句運行時結果集已經被篩選出,此時可使用聚合函數進行二次篩選。
①返回某列平均值(AVG(字段名)) 例:select AVG(score) from test;
②返回某列最大值(MAX(字段名)) 例: select max(score) from test;
③返回某列最小值(MIN(字段名))
例:select min(score) from test;
④返回某列之和(sum(字段名))
例:select sum(score) from test;
⑤返回某列個數(count(字段名)) select count(id) from test;
Group by使用:在原始表中新加一個sex字段(通常儘可能避免修改)
alter table test add sex char(2) default '男'
Group by 與聚合函數使用。
例:將各個性別人數統計出來:select sex, count(sex) from test group by sex;
Group by 與having與聚合函數使用。
having能夠進行二次篩選
例:將數量大於1的性別篩選出來 select sex,count(sex) from test group by sex having count(sex)>1;
一、查詢數據
select * from 表名;
select * from 表名 where 條件;
select 字段 as 別名 from 表名 where 條件;
表結構:
學生表 student(s#,sname,sage,ssex)
課程表 course(c#,cname,T#)
成績表 sc(s#,c#,score)
教師表Teacher(T#,tname)
1.查詢001課程比002課程成績高的全部學生的學號:select sc1.s# from sc sc1 join sc sc2 on sc1.s# = sc2.s# where sc1.c# = '001' and sc2.c# = '002' and sc1.score > sc2.score
2.查詢平均成績大於60分的同窗的學號和平均成績:select s#, avg(score) from sc group by s# having avg(score)>60;
3.查詢全部同窗的學號,姓名,選課數,總成績:select student.s#,student.name ,count(sc.c#) ,sum(sc.score) from student left join sc on student.s# = sc.s#
注:內鏈接要計算笛卡爾積,這裏使用左外鏈接效率更高
4.查詢姓李的老師個數: select count(T#) from Teacher where tname like "李%"
注:模糊查詢, %表明任意字符,_表明任一單個字符,[……]表明是括號中字符中的單個字符, [^……]表明不是括號中字符中的單個字符
5.查詢沒有學過葉萍老師課的同窗學號,姓名: select studet.s# student.sname from student where s# not in (select distinct(sc.s#) from sc, course, teacher where sc.c# = course.c# and teacher.t# = course.t# and teacher.tname = "葉萍");
三表聯合 + 子查詢
6.查詢學過001和002課程的同窗的姓名學號: select student.s3 student .sname from student join course on student.s# = course.s# where(course.c# = '001' union course.c# = '002');
7.查詢學過葉萍老師課的同窗的學號,姓名:select student.s# student.sname from student where s# in(select distinct(sc.s#) from sc course teacher where sc.c# = course.c# and teacher.t# = course.t# and teacher.tnmae = "葉萍")
注:distinct爲去重函數
8.查詢002成績比001低的同窗的學號,姓名: select student.s# student .name from student where student.s# in(select sc1.s# from sc sc1 join sc sc2 on sc1.s# = sc2.s# where s1.c# = 001 and s2.c# = 002 and sc1.score> sc2.score);
9.查詢全部課程成績小於60分的同窗的學號,姓名:select student.s# student.sname from student join sc on student.s# = sc.s# where sc.score > 60;
10.查詢沒有學全 全部課的同窗的學號和姓名:select student.s# student.sname from student,sc where student.s# = sc.s# group by student.s#,student.sname having count(c#) < (select count(c#)from course);
11.查詢至少有一門課程與學號1001的同窗所學相同的同窗的學號和姓名: select student.s# ,student.sname from student join sc where student.s# = sc.s# and c# in select c# from sc where s# = '1001'
12.查詢至少學過學號爲001同窗全部一門課的其餘同窗的學號和姓名: select distinct student.s#,student,sname from SC join student on SC.s# = student.s# where c# in(select c# from sc where s#='001');
後續再更新~