Mysql經常使用語法及練習

1、基本語法

一、建立數據庫數據庫

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 新表名;

2、增刪改、聚合

一、插入數據

①所有數據

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;

3、查詢常見語句

一、查詢數據

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');

後續再更新~

相關文章
相關標籤/搜索