-
1 # 會說科技
-
2 # 人月聊IT
掌握這50句常用SQL基本就差不多了。
建議自己在資料庫建立好以下幾張表,然後自己對照這些例子逐個全部試一遍,並理解透徹。
資料表準備Student(S#,Sname,Sage,Ssex) 學生表Course(C#,Cname,T#) 課程表SC(S#,C#,score) 成績表Teacher(T#,Tname) 教師表
問題:1、查詢“001”課程比“002”課程成績高的所有學生的學號;
select a.S# from (select s#,score from SC where C#="001") a,(select s#,score from SC where C#="002") b where a.score>b.score and a.s#=b.s#;
2、查詢平均成績大於60分的同學的學號和平均成績;
select S#,avg(score) from sc group by S# having avg(score) >60;
3、查詢所有同學的學號、姓名、選課數、總成績;
select Student.S#,Student.Sname,count(SC.C#),sum(score) from Student left Outer join SC on Student.S#=SC.S# group by Student.S#,Sname
4、查詢姓“李”的老師的個數;
select count(distinct(Tname)) from Teacher where Tname like "李%";
5、查詢沒學過“葉平”老師課的同學的學號、姓名;
select Student.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.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#="001"and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#="002");
7、查詢學過“葉平”老師所教的所有課的同學的學號、姓名;
select S#,Sname from Student where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname="葉平" group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname="葉平"));
8、查詢課程編號“002”的成績比課程編號“001”課程低的所有同學的學號、姓名;
Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#="002") score2 from Student,SC where Student.S#=SC.S# and C#="001") S_2 where score2 <score;
9、查詢所有課程成績小於60分的同學的學號、姓名;
select S#,Sname from Student where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and 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 S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#="1001";
12、查詢至少學過學號為“001”同學所有一門課的其他同學學號和姓名; select distinct SC.S#,Sname from Student,SC where Student.S#=SC.S# and C# in (select C# from SC where S#="001");
13、把“SC”表中“葉平”老師教的課的成績都更改為此課程的平均成績;
update SC set score=(select avg(SC_2.score) from SC SC_2 where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname="葉平");
14、查詢和“1002”號的同學學習的課程完全相同的其他同學學號和姓名;
select S# from SC where C# in (select C# from SC where S#="1002") group by S# having count(*)=(select count(*) from SC where S#="1002");
Delect SC from course ,Teacher where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname="葉平";
16、向SC表中插入一些記錄,這些記錄要求符合以下條件:沒有上過編號“003”課程的同學學號、2、 號課的平均成績;
Insert SC select S#,"002",(Select avg(score) from SC where C#="002") from Student where S# not in (Select S# from SC where C#="002");
17、按平均成績從高到低顯示所有學生的“資料庫”、“企業管理”、“英語”三門的課程成績,按如下形式顯示: 學生ID,,資料庫,企業管理,英語,有效課程數,有效平均分
SELECT S# as 學生ID ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#="004") AS 資料庫 ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#="001") AS 企業管理 ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#="006") AS 英語 ,COUNT(*) AS 有效課程數, AVG(t.score) AS 平均成績 FROM SC AS t GROUP BY S# ORDER BY avg(t.score)
18、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分
SELECT L.C# As 課程ID,L.score AS 最高分,R.score AS 最低分 FROM SC L ,SC AS R WHERE L.C# = R.C# and L.score = (SELECT MAX(IL.score) FROM SC AS IL,Student AS IM WHERE L.C# = IL.C# and IM.S#=IL.S# GROUP BY IL.C#) AND R.Score = (SELECT MIN(IR.score) FROM SC AS IR WHERE R.C# = IR.C# GROUP BY IR.C# );
21、查詢不同老師所教不同課程平均分從高到低顯示
SELECT max(Z.T#) AS 教師ID,MAX(Z.Tname) AS 教師姓名,C.C# AS 課程ID,MAX(C.Cname) AS 課程名稱,AVG(Score) AS 平均成績 FROM SC AS T,Course AS C ,Teacher AS Z where T.C#=C.C# and C.T#=Z.T# GROUP BY C.C# ORDER BY AVG(Score) DESC
22、查詢如下課程成績第 3 名到第 6 名的學生成績單:企業管理(001),馬克思(002),UML (003),資料庫(004) [學生ID],[學生姓名],企業管理,馬克思,UML,資料庫,平均成績
SELECT DISTINCT top 3 SC.S# As 學生學號, Student.Sname AS 學生姓名 , T1.score AS 企業管理, T2.score AS 馬克思, T3.score AS UML, T4.score AS 資料庫, ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 總分 FROM Student,SC LEFT JOIN SC AS T1 ON SC.S# = T1.S# AND T1.C# = "001" LEFT JOIN SC AS T2 ON SC.S# = T2.S# AND T2.C# = "002" LEFT JOIN SC AS T3 ON SC.S# = T3.S# AND T3.C# = "003" LEFT JOIN SC AS T4 ON SC.S# = T4.S# AND T4.C# = "004" WHERE student.S#=SC.S# and ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) NOT IN (SELECT DISTINCT TOP 15 WITH TIES ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) FROM sc LEFT JOIN sc AS T1 ON sc.S# = T1.S# AND T1.C# = "k1" LEFT JOIN sc AS T2 ON sc.S# = T2.S# AND T2.C# = "k2" LEFT JOIN sc AS T3 ON sc.S# = T3.S# AND T3.C# = "k3" LEFT JOIN sc AS T4 ON sc.S# = T4.S# AND T4.C# = "k4" ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);
23、統計列印各科成績,各分數段人數:課程ID,課程名稱,[100-85],[85-70],[70-60],[ <60]
SELECT SC.C# as 課程ID, Cname as 課程名稱 ,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85] ,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70] ,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60] ,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -] FROM SC,Course where SC.C#=Course.C# GROUP BY SC.C#,Cname;
24、查詢學生平均成績及其名次
SELECT 1+(SELECT COUNT( distinct 平均成績) FROM (SELECT S#,AVG(score) AS 平均成績 FROM SC GROUP BY S# ) AS T1 WHERE 平均成績 > T2.平均成績) as 名次, S# as 學生學號,平均成績 FROM (SELECT S#,AVG(score) 平均成績 FROM SC GROUP BY S# ) AS T2 ORDER BY 平均成績 desc;
25、查詢各科成績前三名的記錄:(不考慮成績並列情況)
SELECT t1.S# as 學生ID,t1.C# as 課程ID,Score as 分數 FROM SC t1 WHERE score IN (SELECT TOP 3 score FROM SC WHERE t1.C#= C# ORDER BY score DESC ) ORDER BY t1.C#;
26、查詢每門課程被選修的學生數
select c#,count(S#) from sc group by C#;
27、查詢出只選修了一門課程的全部學生的學號和姓名
select SC.S#,Student.Sname,count(C#) AS 選課數from SC ,Studentwhere SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;
28、查詢男生、女生人數
Select count(Ssex) as 男生人數 from Student group by Ssex having Ssex="男"; Select count(Ssex) as 女生人數 from Student group by Ssex having Ssex="女";
29、查詢姓“張”的學生名單
SELECT Sname FROM Student WHERE Sname like "張%";
30、查詢同名同性學生名單,並統計同名人數
select Sname,count(*) from Student group by Sname having count(*)>1;;
31、1981年出生的學生名單(注:Student表中Sage列的型別是datetime)
select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age from student where CONVERT(char(11),DATEPART(year,Sage))="1981";
32、查詢每門課程的平均成績,結果按平均成績升序排列,平均成績相同時,按課程號降序排列
Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;
33、查詢平均成績大於85的所有學生的學號、姓名和平均成績
select Sname,SC.S# ,avg(score) from Student,SC where Student.S#=SC.S# group by SC.S#,Sname having avg(score)>85;
34、查詢課程名稱為“資料庫”,且分數低於60的學生姓名和分數
Select Sname,isnull(score,0) from Student,SC,Course where SC.S#=Student.S# and SC.C#=Course.C# and Course.Cname="資料庫"and score <60;
35、查詢所有學生的選課情況;
SELECT SC.S#,SC.C#,Sname,Cname FROM SC,Student,Course where SC.S#=Student.S# and SC.C#=Course.C# ;
36、查詢任何一門課程成績在70分以上的姓名、課程名稱和分數;
SELECT distinct student.S#,student.Sname,SC.C#,SC.score FROM student,Sc WHERE SC.score>=70 AND SC.S#=student.S#;
37、查詢不及格的課程,並按課程號從大到小排列
select c# from sc where scor e <60 order by C# ;
38、查詢課程編號為003且課程成績在80分以上的學生的學號和姓名;
select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#="003";
39、求選了課程的學生人數
select count(*) from sc;
40、查詢選修“葉平”老師所授課程的學生中,成績最高的學生姓名及其成績
select Student.Sname,score from Student,SC,Course C,Teacher where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname="葉平" and SC.score=(select max(score)from SC where C#=C.C# );
41、查詢各個課程及相應的選修人數
select count(*) from sc group by C#;
42、查詢不同課程成績相同的學生的學號、課程號、學生成績
select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and A.C# <>B.C# ;
43、查詢每門功成績最好的前兩名
SELECT t1.S# as 學生ID,t1.C# as 課程ID,Score as 分數 FROM SC t1 WHERE score IN (SELECT TOP 2 score FROM SC WHERE t1.C#= C# ORDER BY score DESC ) ORDER BY t1.C#;
44、統計每門課程的學生選修人數(超過10人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,查詢結果按人數降序排列,若人數相同,按課程號升序排列
select C# as 課程號,count(*) as 人數 from sc group by C# order by count(*) desc,c#
45、檢索至少選修兩門課程的學生學號
select S# from sc group by s# having count(*) > = 2
46、查詢全部學生都選修的課程的課程號和課程名
select C#,Cname from Course where C# in (select c# from sc group by c#)
47、查詢沒學過“葉平”老師講授的任一門課程的學生姓名
select Sname from Student where S# not in (select S# from Course,Teacher,SC where Course.T#=Teacher.T# and SC.C#=course.C# and Tname="葉平");
48、查詢兩門以上不及格課程的同學的學號及其平均成績
select S#,avg(isnull(score,0)) from SC where S# in (select S# from SC where score <60 group by S# having count(*)>2)group by S#;
49、檢索“004”課程分數小於60,按分數降序排列的同學學號
select S# from SC where C#="004"and score <60 order by score desc;
delete from Sc where S#="001"and C#="001";
-
3 # 檸檬班軟體測試
一、資料庫連線
1、透過命令列連線資料庫
[root@localhost ~]# mysql -u root -p
Enter password:
輸入以上命令,回車後輸入密碼,回車,出現 mysql> 命令提示視窗則表示登入成功,可以在mysql>下輸入任何sql語句。
2、退出mysql
mysql> exit
Bye
二、建立資料庫語法:CREATE DATABASE <資料庫名>;
先連線mysql服務後,再使用sql語句。可以透過命令連線也可以透過客戶端工具例如navicat連線,以下建立一個庫名為lemon的資料庫
mysql> create DATABASE lemon;
三、顯示資料庫語法:show databases;
示例:檢視mysql服務所有資料庫
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| future|
| lemon|
| mysql
| test|
| test_mysql|
+--------------------+
mysql> drop DATABASE test;
五、選擇資料庫語法:use <資料庫名>;
示例:選取資料庫lemon進行操作。
mysql> use lemon;
Database changed
六、建立表語法:create table <表名> ( <欄位名1> <型別1>,<欄位名2> <型別2>, ...,<欄位名n> <型別n>);
示例:需要建立一個學員資訊表,用於儲存學號、姓名、性別、班級、年齡。
create table student(
sno int(8) not null primary key auto_increment comment "學號",
sname varchar(20) NOT NULL comment "姓名",
ssex varchar(4) NOT NULL comment "性別",
sclass int(8) NOT NULL comment "班級",
sage int(4) NOT NULL comment "年齡"
)DEFAULT CHARSET=utf8;
解析:
int為整型,這裡學號sno、班級編號sclass設定為整型;
varchar字元型,這裡姓名sname、性別ssex、年齡sage設定為字元型;
欄位屬性設定為not null,表示欄位值不允許空;
primary key關鍵字用於定義列為主鍵。主鍵唯一、不重複,一般以編號為主鍵;
auto_increment定義列屬性為自增,一般用於主鍵,插入資料時數值會自動加1;
comment相當於給列新增備註;
DEFAULT CHARSET 設定編碼,utf8對傳值中文防止亂碼。
七、顯示資料表mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| student |
| student1 |
+----------------+
八、查看錶結構mysql> drop table student;
十、插入表資料語法:insert into <表名> ( 欄位名1,欄位名2,...欄位名N)
values
( 值1, 值2,...值N );
示例:
1、往學員資訊表中插入一條學員資訊
insert into student (sno,sname,ssex,sclass,sage) values (6301,"檸檬","女",20190163,18);
注意:如果資料值為字元型必須用單引號或者雙引號括起來。
2、批次插入,插入多條學員資訊
insert into student (sname,ssex,sclass,sage)
values
("毛毛","女",20190163,20),("大大","女",20190163,22);
十一、修改表資料語法:update 表名 set 欄位名1= 新值1,欄位名2=新值2, … where 條件表示式1 and(or) 條件表示式2 …;
示例:修改學員姓名為毛毛的性別為男
update student set ssex = "男" where sname = "毛毛";
十二、查詢單表資料語法:select 欄位名1,欄位名2,… from <表名> where 條件表示式1 and(or) 條件表示式2 … ;
1、查詢所有欄位列資訊
示例:查詢student表中,性別女且年齡在20歲以上的學員資訊
select * from student where ssex = "女" and sage > 20;
2、查詢指定欄位列資訊
示例:查詢student表中,性別女或者年齡在20歲以上的學員姓名
select sname from student where ssex = "女" or sage > 20;
3、查詢前幾行資訊
示例:查詢student表中,性別女且年齡在20歲以上的前2行學員資訊
select sname from student where ssex = "女" or sage > 20 limit 0,2;
十三、查詢多表關聯資料語法:
1、關聯查詢:select 欄位名1,… from 表名1,表名2,…where 關聯條件表示式 and 過濾條件表示式 …;
2、等值連線:select 欄位名1,… from 表名1 inner join 表名2 on 關聯條件表示式 and 過濾條件表示式… ;
3、左連線:select 欄位名1,… from 表名1 left join 表名2 on 關聯條件表示式 and 過濾條件表示式… ;
4、右連線:select 欄位名1,… from 表名1 right join 表名2 on 關聯條件表示式 and 過濾條件表示式… ;
示例:
1、以上左表user表,右表為左表的物件資訊user_lover表,查詢兩表中存在物件關係的資訊
SELECT * FROM `user`, user_lover WHERE `user`.id = user_lover.u_id;
SELECT * FROM `user`INNER JOIN user_lover on `user`.id = user_lover.u_id;
執行結果:
2、讀取左表全部資料,即使右表沒有關聯資料
SELECT * FROM `user`LEFT JOIN user_lover on `user`.id = user_lover.u_id;
執行結果:
3、以右表為基礎,與LEFT JOIN相反
SELECT * FROM `user` RIGHT JOIN user_lover on `user`.id = user_lover.u_id;
執行結果:
delete from student where sage < 18;
十五、mysql學習教程mysql官網:https://dev.mysql.com/doc/
http://runoob.com:https://www.runoob.com/mysql/
w3cschool:https://www.w3cschool.cn/mysql/
希望本文對你有用
-
4 # 碼上程功
1, 瞭解你的資料型別
在SQL中,通常每個表列都有一個關聯的資料型別。Text,Integer,VarChar,Date等等,通常是開發人員可以選擇的型別。當然, 需要具體瞭解用的的DBMS的資料型別,如:
MySQL資料型別Oracle資料型別SQL Server資料型別開發時,確保為列選擇適當的資料型別。日期應該是DATE變數,數字應該是數字型別等。當我們處理後面的話題時,這變得尤為重要:索引; 但我會演示一個下面的資料型別知識欠佳的例子:
根據我們目前知道的情況看起來很好,對嗎?但是,如果employeeID實際上是一個字串呢。現在我們遇到了問題,因為DBMS可能找不到匹配項(因為字串資料型別和整數是不同的型別)。
因此,如果您正在使用索引,您可能會困惑於為什麼您的查詢需要永久存在,而應該是簡單的索引掃描。這就是開發人員需要特別關注資料型別及其應用程式的原因。由於增加了授予的靈活性,所以作為ID的非關鍵屬性通常是字串型別,而不是整數。然而,這也是初級開發者的麻煩領域,他們認為ID欄位將是整數。
2,寫符合規範的程式碼
所有程式語言都有Web開發人員應該注意的標準,而SQL沒有任何區別。SQL由ANSI和ISO進行了標準化,並對偶爾提交的語言進行了新的修訂。最新版本是SQL:2008,儘管開發人員應該注意的最重要的修訂是SQL:1999。1999年的修訂版引入了遞迴查詢,觸發器,對PL / SQL和T-SQL的支援以及一些更新的功能。它還定義了JOIN語句在FROM子句中完成,而不是在WHERE子句中完成。
在編寫程式碼時,務必記住為什麼符合標準的程式碼是有用的。使用標準有兩個主要原因。第一個是可維護性,第二個是跨平臺標準化。與桌面應用程式一樣,假設網站將具有較長的使用壽命,並且會透過各種更新來新增新功能和修復問題。正如任何系統分析師會告訴你的,系統在維護階段大部分時間都在使用。當一個不同的程式設計師在2,5或10年後訪問你的程式碼時,他們是否仍然能夠理解你的程式碼在做什麼?標準和意見旨在促進可維護性。
3, 標準化您的資料
資料庫規範化是一種組織資料庫內容的技術。沒有規範化,資料庫系統可能不準確,速度慢,效率低下。資料庫專業人員社群為資料庫的規範化制定了一系列指導方針。標準化的每個“層次”都被稱為表格,總共有5種形式。第一種正常形式是歸一化的最低水平,直到第五種正常形式,這是歸一化的最高水平。
第一正規化(1NF):最基本的資料標準化水平,第一正規化要求消除表中所有重複的列,並且還要求為相關資料建立單獨的表,並且用主鍵標識每個表屬性。第二正規化(2NF):滿足第一正規化的所有要求,並使用外來鍵在表之間建立關係。第三正規化(3NF):滿足第二和第一正規化的所有要求,並刪除所有不依賴主鍵的列。第三正規化也刪除所有派生屬性,如年齡。第四正規化(4NF):第四正規化增加了一個額外的需求,即去除關係中的任何多值依賴關係。第五正規化(5NF):第五正規化是一種罕見的規範化形式,在這種情況下,候選鍵(可能是主鍵值)隱含了連線依賴關係。4, 完全限定您的資料庫物件名稱
從邏輯上講,完全限定名稱看起來像DATABASE.SCHEMA.OBJECTNAME,但是,在語法上(即在可執行語句中),它將只是SCHEMA.OBJECTNAME。儘管各種DBMS確實有各種語法差異,但上述樣式通常適用。
處理較大且由多個使用者使用幷包含多個模式的資料庫時,完全限定您的資料庫名稱非常重要。但是,這是一個很好的習慣。
5, 瞭解索引
資料庫索引是一種資料結構,可提高資料庫表上的操作速度。可以使用資料庫表的一列或多列建立索引,為快速隨機查詢和有效訪問有序記錄提供基礎。在處理大型表格時,索引是非常重要的,但是,如果預期會增長,偶爾應該對較小的表格進行索引。但是,仍然很小的小表不應該被編入索引(例如,如果您的書是1頁,是否有意義轉向索引?)
許多開發人員編寫程式碼並在10或100行的表上測試,並在程式碼充分執行時滿意。但是,隨著表格增長到10,000或1,000,000行,程式碼的速度會慢慢變慢,客戶端不得不午餐等待程式碼執行。
當查詢在資料庫中搜索匹配記錄時,有兩種方法可以執行搜尋。
第一種,最慢的方式是表掃描。在表掃描中,查詢搜尋表中的每個記錄以查詢匹配項。第二,更快的方式是索引掃描。在索引掃描中,查詢將搜尋索引以查詢記錄。在非資料庫術語中,表掃描將等同於讀一本書中的每一頁來尋找一個單詞,而索引掃描相當於翻到本書的後面,找到該單詞,翻轉到指定的頁面,然後閱讀頁面上的單詞以查詢單詞。6, 正確使用資料庫許可權
在使用具有多個使用者的資料庫時,正確處理各種資料庫許可權很重要。顯然,大多數資料庫都有管理員使用者,但是以管理員身份執行查詢總是有意義的嗎?此外,您是否想為您的所有初級開發人員和使用者提供管理員憑據以編寫查詢?很可能不會。資料庫的各種可能的許可權取決於你的DBMS,但它們之間有共同的主題。
例如,在MySQL中,輸入“SHOW TABLES”將顯示資料庫中的表列表,其中您可能會注意到一個“使用者”表。鍵入"DESC使用者"將顯示使用者表中有各種欄位。除了主機,使用者名稱和密碼之外,還有一個可以為使用者設定的許可權列表。另外,還有一個"db"表管理特定資料庫的更多許可權。
【關注ABC(A:人工智慧;B:BigData; C: CloudComputing)技術的攻城獅,Age:10+】
-
5 # 程式設計字典
SQL 教程
SQL 簡介
SQL 語法
SQL Select選擇
SQL SELECT DISTINCT
SQL 查詢子句
SQL 與,或,非
SQL 按關鍵字排序
SQL 在表中插入
SQL 空值
SQL 更新
這些簡單點的搞定再去學高階的:codingdict.com/article/6947
-
6 # 程式設計字典
SQL高階教程:http://codingdict.com/article/6946
SQL高階教程包含以下知識點:
SQL SELECT TOP, LIMIT, ROWNUMSQL LIKE 運算子
SQL Wildcards 萬用字元
SQL IN 運算子
SQL BETWEEN運算子
SQL 通用資料型別
SQL 語句快速參考
SQL Join連線
SQL 內部連線
SQL 左連線
SQL 右連線
SQL 完整外部連線
SQL 自連線
SQL UNION 運算子
SQL SELECT INTO 語句
SQL INSERT INTO SELECT 語句
SQL 撤銷索引、表以及資料庫
SQL CREATE DATABASE 語句
SQL CREATE TABLE 語句
SQL ALTER TABLE 語句
SQL AUTO INCREMENT 欄位
SQL CREATE VIEW、REPLACE VIEW、 DROP VIEW 語句
SQL Server 和 MySQL 中的 Date 函式
SQL NULL 值 – IS NULL 和 IS NOT NULL
SQL進階。。。。
-
7 # SQL資料庫開發
學SQL還是要多讀多寫
讀,是指要有一套學習輔導書籍或影片教程,我覺得至少要先知道SQL 是做什麼的,能夠解決什麼問題,才是該如何學好。
網上的輔導書籍和影片教程很多,這裡推薦我看過的一些比較好的書籍和影片教程
書籍類:
《SQL基礎教程》
《SQL必知必會》
這兩本應該是寫的比較通俗易懂的書籍了,此外一些資料庫的安裝,操作可以網上搜索一下相關的圖文教程,基本上只要你的關鍵字正確,都可以找到你想要的內容。
影片類
說完讀,下面就是寫了
上面這些資料都是為我們寫SQL語句作的準備,但是真正要學會SQL 還是要多動手動腦。
SQL 終歸還是一門語言,有它固定的語法,這些語法就需要我們去記住。如何記住呢?那就是不停的練習寫SQL 程式碼,並且用SQL 程式碼解決一些問題,比如每學完一個知識點就去做一道題,這樣效果會很好。
此外,凡事都有個過程,學習也不例外,學SQL 如果只是學個皮毛,一週時間就夠了。但是真正去解決問題你就會發現無從下手,所以還是要多月多練,並且要養成做筆記的習慣,不會的內容一定要弄懂才進行下一步。
不管是學SQL ,還是學其他東西,我相信方法都類似,只是看你是否堅持下去了。
-
8 # SQL開發與最佳化
學習SQL 語言,如果你是菜鳥,你首先先確定,要學習哪個資料庫的SQL語言,雖然 每個資料庫的SQL語言大同小異,但還是先確定好一個之後,從入門開始到精通 之後 再學習別的資料庫的SQL.
初級的SQL 是一些基礎性的語法問題,最簡單的單表查詢的一些如SELECT 列名 FROM 表明 WHERE 條件列 等式 條件 GROUP BY HAVING ORDER BY 等等。
這裡還有每個資料庫特定的函式等等
這些你如果都過關了,那需要寫複雜的SQL,複雜的SQL 一般跟批處理,報表有關,需要大量的JOIN 等等,在往後就是學各個資料庫的體系架構了,因為你寫SQL 還需要考慮效能,因為好不容易寫出來的 跑不出來 就尷尬了。。。
如果你想這些都掌握,自己可以大概算算,需要多久。。
-
9 # 532的天空
學習sql語言就是在學關係型資料庫。
第一步要學習資料庫的儲存方式,以及對資料庫表的認識。
第二步要學習資料庫設計的三正規化。
第三步要學資料庫語法增刪改查如何編寫,關聯如何寫,子查詢如何寫。索引,儲存過程,檢視,觸發器等的內容。
第四步要學習不同資料庫之間的差別。
-
10 # 張同學嗎
入門是比較簡單的,一些增刪改查的簡單語句 是基本。如果要想更深入的學習,需要針對不同的業務多思考。這些才是重要的內容尤其要學習各種的查詢語句的書寫,多表連線,自查詢,分組查詢等等。多練習,不斷的強化。推薦一個數據庫自學的影片教程:B站搜尋BV1ii4y1A7tv
-
11 # blue藍夢
1、SQL也是一種語言;
2、SQL語句實際是一種操作行為的表達,因此首先要知道SQL的基本操作語法,DDL,DML;
3、要有基本的統計學思想,畢竟SQL在業務中做統計的情況很多,因此分組、最大值、最小值、平均值等都是基礎;
4、要知道各個SQL的時間實現方式,時間語法很重要;
5、在此強調要懂得統計學思想,這樣,你才能明白某些複雜的統計如何抽絲剝繭實現;
6、學會分步查詢,不是所有的查詢都要一步到位,實現最終結果,發現相同的部分,實現資料的原子化,藉助中間表查詢,這樣可以降低查詢難度,同時又可以提高查詢的效率,查詢結果的原子化,特別適用於一些每天/每月等才會發生一次變化,或者需要統計的資料的時候,資料原子化可以提高查詢效率
-
12 # 資料分析精選
自學的話,找本系統的教材或書籍,搭個SQL執行環境,邊看書邊實踐,很快就入門了;跟老師學的話,就報個班或購買一套實操教程。
-
13 # SQL開發與最佳化
深入SQL 你先確定你的定位是什麼
開發深入學習SQL 就首先達到你能想到就能實現的程度
DBA 最佳化人員深入學習 應該達到,能看懂別人寫SQL 並且透過執行計劃找出效能瓶頸且能透過改寫或者新增索引等等 達到最佳化的效果
回覆列表
本人目前在某家商業銀行從事資料服務工作,SQL是工作的必備技能,也見證許多同學從不會到精透過程,感受如下:
看書,系統讀一遍對新手來講,我的一貫建議是找一本經典書,好好讀一遍,切不可用碎片化學習取代系統學習,不然就會不成體系,缺乏邏輯性。
看程式碼,學習程式碼邏輯找前輩之前做過的資料服務,看看每一個數據需求的程式碼是怎麼寫的,用了那些技巧和知識點,與書裡面的內容相聯絡,這樣既鞏固了技術知識,也學習了業務知識,一舉兩得。如果能發現前輩程式碼中的問題並適當最佳化,就更完美了。
實操,寫具體業務邏輯由易到難地嘗試多個具體的資料需求,編寫SQL程式碼,實現業務邏輯,這樣能加深技術理解和業務認知,有助於熟悉資料分佈。
重點問題重點分析有了系統的學習和一定的實操之後,再遇到問題就可以透過碎片化學習等查缺補漏,進行強化。
關注大餅說科教,一起聊聊資料、科技、安全、金融的那些瑣事。