Maison  >  Article  >  base de données  >  Résumé des requêtes avancées de MySQL (2)

Résumé des requêtes avancées de MySQL (2)

零下一度
零下一度original
2017-06-30 15:23:563250parcourir

Points de connaissance : sous-requête EXISTS, sous-requête NOT EXISTS, requête de pagination, requête conjointe UNION

1. Partie Word

①existe existe ②temp temporaire ③zone de district

④contenu ⑤temporaire

2. Partie aperçu

1. Les jointures de tables peuvent-elles être remplacées par des sous-requêtes

Oui

2. Détecter un certain point. plage, quels mots-clés peuvent être utilisés dans la sous-requête

EXISTS

3. Quelles instructions SQL peuvent imbriquer des sous-requêtes

Instructions de requête de données plus complexes Lorsque les données de plusieurs tables sont nécessaires

La sous-requête peut apparaître partout où une expression apparaît

3. Partie de l'exercice

1 Interroger les informations sur les résultats du test de l'étudiant S2

#Onboard 1
SELECT. `studentNo`,`subjectNo`,`studentResult`,`exameDate` FROM `result`
OÙ EXISTE (SELECT `studentNo` FROM `student` WHERE gradeId=2 )
AND studentNo IN (SELECT `studentNo` FROM `student` WHERE gradeId=2)

2. Créer un relevé de notes de l'étudiant

#En ligne 2
SELECT `studentName` AS nom, `gradeName` AS note du cours , `subjectName` AS nom du cours, `exameDate` AS date de l'examen FROM (
SELECT `studentName`,`gradeName`,`subjectName`,`exameDate` FROM ` grade` AS gr,`result` AS re,`student ` AS stu,`subject` AS sub
WHERE gr.`gradeID`=stu.`gradeID` AND re.`studentNo`=stu.`studentNo`
Extraire les résultats vers une table temporaire

#Sur la machine 3

#select subjectNo from `subject` où `subjectName`='Logic Java';

#select max(`exameDate`) à partir du résultat de la jointure interne ` subject` sur `result`.`subjectNo`=`subject`.`subjectNo`

#where `subjectName`='Logic Java';

# sélectionnez `gradeID` dans `subject` où `subjectName `='Logic Java';

#Nombre de personnes qui devraient être présentes

SELECT COUNT(*) AS Nombre de personnes qui devraient être présentes FROM étudiant
WHERE `gradeID`=(SELECT ` gradeID` FROM `subject` WHERE `subjectName`='Logic Java');

# Nombre réel d'arrivées

SELECT COUNT(*) AS Nombre réel d'arrivées FROM résultat
WHERE `subjectNo`=(SELECT subjectNo FROM ` subject` WHERE `subjectName`='Logic Java')
AND exameDate=(SELECT MAX(`exameDate`) FROM result INNER JOIN `subject` ON `result`.`subjectNo`=`subject`.`subjectNo`
WHERE `subjectName`='Logic Java');
#Nombre d'absents
SELECT((SELECT COUNT(*) FROM student
WHERE `gradeID`=(SELECT `gradeID` FROM `subject ` OÙ `subjectName`='Logic Java'))-
(SELECT COUNT(*) FROM result
WHERE `subjectNo`=(SELECT subjectNo FROM `subject` WHERE `subjectName`='Logic Java')
AND examenDate=(SELECT MAX(`exameDate`) FROM result INNER JOIN `subject` ON `result`.`subjectNo`=`subject`.`subjectNo`
WHERE `subjectName`='Logic Java')) ) AS Nombre d'absents ;

/*select studentName,student.studentNo,studentResult
from student,result
where student.`studentNo`=result.`studentNo`*/
# ADD TO TABLE

DROP TABLE IF EXISTS tempResult;

CREATE TABLE tempResult(
SELECT studentName,student.studentNo,studentResult
FROM student,result
WHERE student.`studentNo`=result.` studentNo `
)

4. La requête de pagination affiche les informations sur la maison de location

#Sur l'ordinateur 4
SUPPRIMER LA BASE DE DONNÉES SI EXISTE `maison`;

CRÉER LA BASE DE DONNÉES maison ;

USE house;

#Table d'informations client
DROP TABLE IF EXISTS `sys_user`;

CREATE TABLE `sys_user`(

`uid` INT(4) NOT NULL COMMENT 'Numéro client' AUTO_INCREMENT PRIMARY KEY,

`uName` VARCHAR(50) COMMENT 'Nom du client',

`uPassWord` VARCHAR(50) COMMENT 'Mot de passe client'

);

#Tableau d'informations sur les districts et comtés

DROP TABLE IF EXISTS `hos_district`;

CREATE TABLE `hos_district`(


`did` INT (4) NOT NULL COMMENT 'Numéro du district et du comté' AUTO_INCREMENT PRIMARY KEY,

`dName` VARCHAR(50) NOT NULL COMMENT 'Nom du district et du comté'

);

# Informations sur la rue Il y a une clé étrangère dans la table

DROP TABLE IF EXISTS `hos_street`;


CREATE TABLE `hos_street`(

`sid` INT(4) NOT NULL COMMENT 'numéro de rue' AUTO_INCREMENT PRIMARY KEY,

`sName` VARCHAR(50) COMMENT 'street name',

`sDid` INT(4) NOT NULL COMMENT 'numéro de district et de comté'

);

#Table de type maison

DROP TABLE IF EXISTS `hos_type`;

CREATE TABLE `hos_type`(


`hTid` INT (4) NOT NULL COMMENT 'Numéro du type de maison' AUTO_INCREMENT PRIMARY KEY,

`htName` VARCHAR(50) NOT NULL COMMENT 'Nom du type de maison'

);

#Tableau d'informations sur la maison de location

DROP TABLE IF EXISTS `hos_house`;

CREATE TABLE `hos_house`(


`hMid` INT(4) NOT NULL COMMENT 'Numéro de maison de location' AUTO_INCREMENT CLÉ PRIMAIRE,

`uid` INT(4) NON NULL COMMENTAIRE 'numéro de client',

`sid` INT(4) NON NULL COMMENTAIRE 'numéro de district et de comté',

`hTid` INT (4) NON NULL COMMENTAIRE 'Numéro de type de maison',

`prix` DECIMAL NON NULL COMMENTAIRE 'Loyer mensuel',

`topic` VARCHAR(50) NOT NULL COMMENT 'titre',

`contents` VARCHAR(255) NOT NULL COMMENT 'description',

`hTime` TIMESTAMP NOT NULL COMMENT 'Durée de sortie' DEFAULT NOW(),

`copy` VARCHAR(255) NOT NULL COMMENT 'Remarks'
);

#Chaque information de contrainte

# Numéro de district et de comté identifiant de clé étrangère des informations de rue
ALTER TABLE `hos_street` ADD CONSTRAINT fk_stree_distr
FOREIGN KEY (`sDid`) REFERENCES `hos_district` (`did`);


# Informations sur la maison de location et relation entre les différentes tables
ALTER TABLE `hos_house` ADD CONSTRAINT fk_house_user
FOREIGN KEY (`uid`) REFERENCES `sys_user` (`uid`);

ALTER TABLE ` hos_house` AJOUTER UNE CONTRAINTE fk_house_street
RÉFÉRENCES DE CLÉ ÉTRANGÈRE (`sid`) `hos_street` (`sid`);

ALTER TABLE `hos_house` AJOUTER UNE CONTRAINTE fk_house_type
RÉFÉRENCES DE CLÉ ÉTRANGÈRE (`hTid`) `hos_type ` (`hTid`);

#Contraintes par défaut
ALTER TABLE `hos_house` ALTER COLUMN `price` SET DEFAULT 0;

#ALTER TABLE `hos_house` ALTER COLUMN ` hTime` SET DEFAULT now();

#Ajouter des informations

#Table utilisateur
INSERT INTO `house`.`sys_user` (`uName`, `uPassWord`) VALUES (' Xiaomi ', '123'),
('Baishun', '123'),
('Lianji', '123'),
('Dongmei', '123');

#Tableau d'informations sur les districts et les comtés
INSERT INTO `house`.`hos_district` (`dName`) VALUES ('Haidian District'),
('Dongcheng District'),
(' Nancheng District'),
('District de Xicheng'),
('Zone de développement');

# Tableau d'informations sur les rues
INSERT INTO `house`.`hos_street` (`sName ` ) VALEURS ('Wanquan');
INSÉRER DANS `house`.`hos_street` (`sName`, `sDid`) VALEURS ('Wanquan', '1'); hos_street` (`sName`, `sDid`) VALEURS ('Zhongguan', '3');
INSÉRER DANS `house`.`hos_street` (`sName`, `sDid`) VALEURS (' Wanjia', ' 4');
INSERT INTO `house`.`hos_street` (`sName`, `sDid`) VALUES ('海风', '5');

#Table de type maison

INSERT INTO `house`.`hos_type` (`htName`) VALUES ('Une chambre et un salon');
INSERT INTO `house`.`hos_type` (`htName`) VALUES ('Deux chambres Un salon ');
INSERT INTO `house`.`hos_type` (`htName`) VALUES ('Trois chambres et un salon')
INSERT INTO `house`.`hos_type` (`htName`) VALUES); ( 'Deux chambres et une salle de bain');
INSERT INTO `house`.`hos_type` (`htName`) VALUES ('Une chambre et une salle de bain');

#Maison à louer table d'informations
INSERT INTO `house`.`hos_house` (`uid`, `sid`, `hTid`, `price`, `topic`, `contents`, `hTime`, `copy`)
VALEURS (' 1', '1', '1', '530', 'Chambre avec vue', 'Balcon pour regarder la mer', '2017-7-7', 'Achetez aussi vite que vous en avez besoin'); 🎜>INSÉRER DANS `house `.`hos_house` (`uid`, `sid`, `hTid`, `price`, `topic`, `contents`, `hTime`, `copy`)
VALUES (' 2', '2' , '2', '430', 'Chambre avec lit King', 'Dormir confortablement', '2017-6-9', 'Tellement confortable');
INSÉRER DANS la `maison`.` hos_house` (`uid`, `sid`, `hTid`, `price`, `topic`, `contents`, `hTime`, `copy`)
VALEURS ('3', '3', '3 ', '480', 'Chambre double', 'Hé hé hé', '2016-9-9', 'Comprenez-vous');
INSERT INTO `house`.`hos_house` (`uid`, `); sid`, `hTid`, `price`, `topic`, `contents`, `hTime`, `copy`)
VALEURS ('4', '4', '4', '360', 'Single room', 'Travel essential Select', '2015-8-8', 'En attendant que vous choisissiez');

#À bord 4

CRÉER UNE TABLE TEMPORAIRE temp_house

(SELECT * FROM ` hos_house` LIMIT 2,2 ; ='Désert';
SELECT `dName`,`sName`,hou.`hTid`,`price`,`topic`,`contents`,`hTime`,`copy`
FROM `hos_house` AS hou,`hos_district` AS dist,`hos_street` AS str,`sys_user` AS us,`hos_type` AS ty
OÙ hou.`uid`=us.`uid` ET hou. `hTid`=ty.` hTid` ET hou.`sid`=str.`sid` ET str.`sDid`=dist.`did`

AND hou.`uid`=(SELECT `uid` FROM ` sys_user` WHERE uName='大 Desert ');

6. Faites une liste de locations de maisons par district et comté


#Sur l'ordinateur 6
/*sélectionnez le sid dans `hos_house` grouper par sid ayant count(sid)>1 ;
sélectionnez `sDid` dans `hos_street`
où sid=(SELECT sid FROM `hos_house` GROUP BY sid HAVING COUNT(sid)>1);
sélectionnez `dName` dans `hos_district` où `did`=(SELECT `sDid` FROM `hos_street`

WHERE sid=(SELECT sid FROM `hos_house` GROUP BY sid HAVING COUNT(sid)>1)) ;*/

SELECT `htName`, `uName`,`dName`,`sName`

FROM `hos_house` AS hou,`hos_district` AS dist,`hos_street` AS str,`sys_user` AS nous, `hos_type` AS ty

OÙ hou.`uid`=us.`uid` ET hou.`hTid`=ty.`hTid` ET hou.`sid`=str.`sid` ET str.`sDid` =dist.`did`
AND hou .sid=(SELECT sid FROM `hos_house` GROUP BY sid HAVING COUNT(sid)>1);

Faites une liste de locations de maisons par quartier et comté

#上机7 QUARTER(NOW())获取季度
/*FROM `hos_house` AS hou,`hos_district` AS dist,`hos_street` AS str,`sys_user` AS us,`hos_type` AS ty
GROUPE PAR hou.`hMid`
OÙ hou.`uid`=us.`uid` ET hou.`hTid`=ty.`hTid` ET hou.`sid`=str.`sid` ET str.`sDid`=dist.`did`*/


SELECT QQ AS '季度',dist.`dName` AS '区县',str.`sName` AS '街道',
ty.`htName` AS '户型',CNT AS '房屋数量'
FROM
(
 SELECT QUARTER(`hTime`) AS QQ,`sid` AS SI,`hTid` AS HT,COUNT(*) CNT
 FROM `hos_house` AS hou
 WHERE QUARTER(`hTime`)
 GROUP BY QUARTER(`hTime`),`sid`,`hTid`
 ) AS temp,`hos_district` dist,`hos_street` AS str,`hos_type` AS ty,`hos_house` AS hou
OÙ hou.`hTid`=ty.`hTid` ET hou.`sid`=str.`sid ` AND str.`sDid`=dist.`did`

UNION

SELECT QUARTER(`hTime`),`hos_district`.`dName`,' 小计 ','  ', COUNT(*) AS '房屋数量'
FROM `hos_house`
INNER JOIN `hos_street` ON(hos_house.`sid`=hos_street.`sid`)
INNER JOIN hos_district ON(hos_street.`sDid `=hos_district.`did`)
WHERE QUARTER(`hTime`)
GROUP BY QUARTER(`hTime`),hos_district.`dName`
UNION

SELECT QUARTER(`hTime `),' 合计 ','  ','  ',COUNT(*) AS '房屋数量'
FROM hos_house
WHERE QUARTER(`hTime`)
GROUP BY QUARTER(`hTime`)
ORDER PAR 1,2,3,4

五.总结

UNION有点陌生其它没什么。。。。

欢迎提问,欢迎指错,欢迎讨论学习信息 有需要的私聊 发布评论即可 都能回复的

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn