关于MySql 和SqlServer 中left join , full join的一点区别
刚刚在用mysql写一个select语句,中间用到了一些连接方面的功能,发现这2者还是有不少区别的。 首先交代一下环境: OS:windows 2003 MySql:Server version 5.0.37 SqlServer:2000 + sp4 题目简化后是这样的: 3张表 st, rk, ck, st(id int) id 1 2 3 4
刚刚在用mysql写一个select语句,中间用到了一些连接方面的功能,发现这2者还是有不少区别的。
首先交代一下环境:
OS:windows 2003
MySql:Server version 5.0.37
SqlServer:2000 + sp4
题目简化后是这样的:
3张表 st, rk, ck,
st(id int)
id |
1 |
2 |
3 |
4 |
5 |
rk(id int fk st.id, rk int)
id | rk |
1 | 4 |
2 | 5 |
3 | 6 |
ck(id int fk st.id, ck int)
id | ck |
2 | 3 |
3 | 4 |
4 | 1 |
现在要求用一条select实现这样的输出效果
id | rk | ck |
1 | 4 | 0 |
2 | 5 | 3 |
3 | 6 | 4 |
4 | 0 | 1 |
由于我用的MySql的编辑器不是很方便,所以想干脆先在SqlServer里面模拟一下看看。
利用full join,很快实现了我想要的结果,语句如下
select isnull(rk.id,ck.id) id,isnull(rk,0) rk,isnull(ck,0) ck
from rk
full join ck
on rk.id = ck.id
然后把语句放到MySql里,问题就来了,直接报错,提示是full join出错,没有这样的语法。
我怀疑是不是MySql不支持full join,然后到google上看了一下,看到不少都是直接用的full join做的,即
select ifnull(rk.id,ck.id) id,ifnull(rk,0) rk,ifnull(ck,0) ck
from rk
full join ck
on rk.id = ck.id
这里MySql的ifnull函数等同于SqlServer的isnull函数,即如果arg1为null,返回arg2,否则返回arg1。
但是我怎么调都不对。
到官网上看了下,一是也没找到详细说明。后来在一篇文章中看到,原来5.1+的版本才有full join。OMG~~~~~~
之前基本都是用left join ,right join组合来模拟。
看到这里我也想开了,撞到墙后不是回头,而是跨过去。
利用了left 再left,实现了上面的效果:
select st.id,ifnull(rk.rk,0) as rk,ifnull(ck.ck,0) as ck
from st
left join rk on (st.id = rk.id)
left join ck on (st.id = ck.id)
where rk != 0 or ck != 0
当然,也可以仿照上面文章的方法,利用left union right
select * from rk
left join ck on rk.id = ck.id
union
select * from rk
right join ck on rk.id = ck.id
好像更容易理解一点,也更通用。估计SqlServer内部也就是这样实现的。full join 是sql92标准。
还有一点区别:
MySql支持这样的join语法,SqlServer不支持
select *
from st
left join (ck,rk)
on (rk.id = st.id and ck.id = st.id)
结果是这样
id | rk | ck |
1 | ||
2 | 5 | 3 |
3 | 4 | 6 |
4 | ||
5 |
可以看出,并不是我上面想要的。具体这个语法是什么没有细究,感觉应该是join括号里面的先做连接。
或者说left join(A, B)是一个"join 与"的写法,而left join A XXXXXX left join B XXXXXX 是"join 或"。
估计前者不是sql92。
MySql,full join,left join

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Compétences en matière de traitement de la structure des Big Data : Chunking : décomposez l'ensemble de données et traitez-le en morceaux pour réduire la consommation de mémoire. Générateur : générez des éléments de données un par un sans charger l'intégralité de l'ensemble de données, adapté à des ensembles de données illimités. Streaming : lisez des fichiers ou interrogez les résultats ligne par ligne, adapté aux fichiers volumineux ou aux données distantes. Stockage externe : pour les ensembles de données très volumineux, stockez les données dans une base de données ou NoSQL.

Les performances des requêtes MySQL peuvent être optimisées en créant des index qui réduisent le temps de recherche d'une complexité linéaire à une complexité logarithmique. Utilisez PreparedStatements pour empêcher l’injection SQL et améliorer les performances des requêtes. Limitez les résultats des requêtes et réduisez la quantité de données traitées par le serveur. Optimisez les requêtes de jointure, notamment en utilisant des types de jointure appropriés, en créant des index et en envisageant l'utilisation de sous-requêtes. Analyser les requêtes pour identifier les goulots d'étranglement ; utiliser la mise en cache pour réduire la charge de la base de données ; optimiser le code PHP afin de minimiser les frais généraux.

La sauvegarde et la restauration d'une base de données MySQL en PHP peuvent être réalisées en suivant ces étapes : Sauvegarder la base de données : Utilisez la commande mysqldump pour vider la base de données dans un fichier SQL. Restaurer la base de données : utilisez la commande mysql pour restaurer la base de données à partir de fichiers SQL.

Comment insérer des données dans une table MySQL ? Connectez-vous à la base de données : utilisez mysqli pour établir une connexion à la base de données. Préparez la requête SQL : Écrivez une instruction INSERT pour spécifier les colonnes et les valeurs à insérer. Exécuter la requête : utilisez la méthode query() pour exécuter la requête d'insertion en cas de succès, un message de confirmation sera généré.

L'un des changements majeurs introduits dans MySQL 8.4 (la dernière version LTS en 2024) est que le plugin « MySQL Native Password » n'est plus activé par défaut. De plus, MySQL 9.0 supprime complètement ce plugin. Ce changement affecte PHP et d'autres applications

Pour utiliser les procédures stockées MySQL en PHP : Utilisez PDO ou l'extension MySQLi pour vous connecter à une base de données MySQL. Préparez l'instruction pour appeler la procédure stockée. Exécutez la procédure stockée. Traitez le jeu de résultats (si la procédure stockée renvoie des résultats). Fermez la connexion à la base de données.

La création d'une table MySQL à l'aide de PHP nécessite les étapes suivantes : Connectez-vous à la base de données. Créez la base de données si elle n'existe pas. Sélectionnez une base de données. Créer un tableau. Exécutez la requête. Fermez la connexion.

La base de données Oracle et MySQL sont toutes deux des bases de données basées sur le modèle relationnel, mais Oracle est supérieur en termes de compatibilité, d'évolutivité, de types de données et de sécurité ; tandis que MySQL se concentre sur la vitesse et la flexibilité et est plus adapté aux ensembles de données de petite et moyenne taille. ① Oracle propose une large gamme de types de données, ② fournit des fonctionnalités de sécurité avancées, ③ convient aux applications de niveau entreprise ; ① MySQL prend en charge les types de données NoSQL, ② a moins de mesures de sécurité et ③ convient aux applications de petite et moyenne taille.
