1. 程式人生 > >Mysql資料庫學習(4)階段性完結

Mysql資料庫學習(4)階段性完結

-- 倒序輸出全部使用者的許可權資訊
SELECT * from users order by powers  desc
-- 統計女生人數,靈活使用count,看題目要求,你要計算的是什麼?
SELECT  COUNT(sid) FROM `student` WHERE ssex='f'
-- 統計一共開設了多少了專業
SELECT COUNT(DISTINCT szhuanye) as 專業數 FROM student
-- 統計每個專業的人數
SELECT szhuanye AS 專業名稱,COUNT(sid) as 學生人數 FROM student GROUP BY szhuanye
-- 統計每個專業的男生和女生的人數
SELECT szhuanye AS 專業名稱,ssex AS 性別,COUNT(sid) as 學生人數 FROM student GROUP BY szhuanye,ssex
-- 統計每個專業的學生的人數,只顯示超過5個人的記錄,HAVING對的是查詢結果進行操作,
-- 但是where是對欄位進行操作,去了別名之後就不需要加所謂的單引號、雙引號
SELECT szhuanye,COUNT(sid)as 學生人數 FROM student GROUP BY szhuanye HAVING 學生人數>5
-- 統計每門課程的平均分、最高分和最低分
select cname 課程名稱,avg(score) 平均分, max(score) 最高分,min(score) 最低分
from score sc,course c
where sc.cid=c.cid  GROUP BY sc.cid
-- 計算每個學生的總成績
select sname 姓名,SUM(score) as 總成績 from student s,score sc
where s.sid = sc.sid GROUP BY sc.sid
-- 計算英語專業成績低於75分的學生資訊
select s.sid,sname,sage,ssex,szhuanye,score,cname
from student s,course c, score sc
where s.sid=sc.sid and c.cid=sc.cid
and cname='英語'
and score<75
-- 在students表中利用模糊查詢完成操作:
 -- 1. 找出所有姓劉的同學,顯示全部資訊
select * from student where sname LIKE '劉%'
-- 2. 找出姓名中含有"敏"的同學,顯示全部資訊
select * from student where sname LIKE '%敏%'
-- 3. 找出所有姓張,且姓名中含有"妹"的同學,顯示全部資訊
select * from student where sname LIKE '張%妹%'
-- 4. 找出所有姓林,最後一個字為"如"的同學,顯示全部資訊
select * from student where sname LIKE '林%如'


-- 難點、經典例題
create database nba;
use nba;


create table teams(
    tid TINYINT PRIMARY KEY auto_increment,
    tname varchar(20) not null
)charset='utf8';

create table results(
    id TINYINT PRIMARY KEY auto_increment,
    hid tinyint not null,
    gid tinyint not null,
    match_time datetime ,
  result varchar(10) not null
)charset='utf8';

insert into teams values(default,'小牛'),(default,'爵士'),(default,'火箭'),
(default,'雷霆'),(default,'老鷹');

insert into results values(default,2,4,'2016-12-01 08:00:00','99:83');
insert into results values(default,3,4,'2016-12-02 08:00:00','84:101');
insert into results values(default,2,5,'2016-12-02 19:30:00','78:87');
insert into results values(default,5,1,'2016-12-03 08:00:00','121:109');
insert into results values(default,3,5,'2016-12-03 19:30:00','99:103');

select * from teams;
select * from results;


use score
select t1.tname 主隊名稱,t2.tname 客隊名稱,match_time,result
from teams t1
RIGHT JOIN
results r
on r.hid= t1.tid
LEFT JOIN teams t2
on r.gid = t2.tid

select * from langTable

id pid name

2   6         精品錢包
3   4     單冷空調
4   1     空調
5   5       箱包
6   5         男士包
1   1   家用電器

家用電器  空調  單冷空調
    電視    平板
        液晶
        
箱包

-------  利用遞迴思想實現(從第一級開始找,找到以它為pid的第二級,再找以當前id為pid的第三級,找完後回到第二級再繼續找其它第二級目錄...)

指令碼語言  程式語言
編譯語言 程式語言
PHP       指令碼語言

 

 

-- ----------------------------
-- Table structure for langtable
-- ----------------------------
DROP TABLE IF EXISTS `langtable`;
CREATE TABLE `langtable` (
  `lid` int(11) NOT NULL AUTO_INCREMENT,
  `pid` int(11) NOT NULL,
  `lname` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`lid`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of langtable
-- ----------------------------
INSERT INTO `langtable` VALUES ('1', '9', '指令碼語言');
INSERT INTO `langtable` VALUES ('2', '9', '編譯語言');
INSERT INTO `langtable` VALUES ('3', '1', 'PHP');
INSERT INTO `langtable` VALUES ('4', '1', 'JS');
INSERT INTO `langtable` VALUES ('5', '1', 'Python');
INSERT INTO `langtable` VALUES ('6', '9', 'C');
INSERT INTO `langtable` VALUES ('7', '9', 'C++');
INSERT INTO `langtable` VALUES ('8', '9', 'Java');
INSERT INTO `langtable` VALUES ('9', '9', '程式語言');
select l1.lname 語言,l2.lname 父語言 from langTable l1
LEFT JOIN langTable l2
ON l1.pid = l2.lid