Table des matières
SQL
Voir aussi /informatique/SGBD
Articles
Cours SQL:
- Sql Tutorial sur dofactory.com
Tips
Sql Join
- (INNER) JOIN: Select records that have matching values in both tables.
- LEFT (OUTER) JOIN: Select records from the first (left-most) table with matching right table records.
- RIGHT (OUTER) JOIN: Select records from the second (right-most) table with matching left table records.
- FULL (OUTER) JOIN: Selects all records that match either left or right table records.
- All INNER and OUTER keywords are optional
Docs:
- Jointure SQL pas Sql.sh
Données Hiérarchiques (Nested Categories)
Gestion d'arbres par représentation intervallaire
There are categories and sub-categories (with apparently unlimited sub-categories).
If by this you many there are arbitrarily many levels of category nesting, you can't grab them all with a single query using the ‘parent reference’ schema model. You would have to repeatedly query the children of each category you found, recursively, or just keep doing longer and longer self-joins until you've picked up the most-deeply-nested items.
For single-query access to hierarchical data you will have to look into alternative ways of structuring the schema, principally:
- Nested Sets: stores a numerical ordering of a recursive walk over the tree
- Adjacency Relation: adds extra ancestor/descendent pairs to your child/parent lookup
Either or both of these approaches, in one of their flavours, may work for you. (I usually end up with Nested Sets so that I get an explicit first-to-last order as well.)
Storing Hierarchical Data in a Database By Gijs Van Tulder April 30th 2003
Managing Hierarchical Data in MySQL By Mike Hillyer (dev.mysql.com)
PHP Cat Nested Model Category Class
This class can be used to manage an hierarchy of categories stored in a MySQL database.
It can add, update and delete records of categories to a MySQL database table.
It can also retrieve categories under a given category, get top categories, get the largest category and get all categories.
Manipulons ce qui n'est pas
ou encore: sélection des lignes orphelines.
Question
I've got a SELECT query that I would like to transform as a DELETE query , but I could not write that DELETE query ;o{
Here is the case :
In a search engine, I would like to erase all words that are no more attached to a feedback entry.
table Words ( IID, Word ) table Feedbacks_has_Words ( Feedbacks_IID, Words_ID ) table Feedbacks( IID, …. )
When a word has no more feedback attached (relation is table Feedbacks_has_Words) , it should be deleted.
To find such words, this SELECT query works fine :
SELECT IID,Word, Feedbacks_IID FROM Words LEFT JOIN Feedbacks_has_Words ON IID = Words_IID WHERE Feedbacks_IID IS NULL
I could not figure how to right the DELETE Query … Have you got a idea about it ???
Answer
DELETE FROM Words WHERE IID NOT IN ( SELECT Words_ID FROM Feedbacks_has_Words )
Question
Avec une base de données sqlite avec 2 tables. Une table contient les stations métérologiques et une table contient les mesures de températures journalières pour ces stations. Comment trouver en SQL les dates et les stations pour lesquelles il manque des mesures ?
Réponse
SELECT s.id, s.name AS nom_station, dates.measured_at FROM stations s CROSS JOIN ( SELECT DISTINCT measured_at FROM measures ) AS dates LEFT JOIN measures m ON s.id = m.station_id AND dates.measured_at = m.measured_at WHERE m.station_id IS NULL ORDER BY s.id, dates.measured_at;
Insertions
Question
I've to add some words in a dictionnary table. Words are managed with an Unique Index.
I think about 2 ways :
1/ Make a first query to look if the word already exists, and insert it if not exists.
or
2/ Directly insert the word and catch the exception if the word already exists.
I think the second way is faster/lighter … Is it true ? What do you think about that ?
Answer
there are other alternatives
INSERT IGNORE …. –> (Scroll down for it :) )http://dev.mysql.com/doc/refman/5.0/en/insert.html
INSERT … ON DUPLICATE KEY UPDATE –> http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
REPLACE –> http://dev.mysql.com/doc/refman/5.0/en/replace.html
pour les accès concurrents avec SELECT FOR UPDATE en SQL
Supprimer doublons
https://sql.sh/138-methode-supprimer-doublons
Compter les doublons:
SELECT COUNT(*) AS DOUBLON, employee_id FROM globalstatements GROUP BY employee_id HAVING COUNT(*) > 1 LIMIT 100000
Les supprimer:
DELETE G1 FROM globalstatements G1 LEFT OUTER JOIN ( SELECT MIN(id) AS id, employee_id FROM globalstatements GROUP BY employee_id ) AS G2 ON G1.id = G2.id WHERE G2.id IS NULL ;
Supprimer dans plusieurs tables
Supprimer les lignes dans les tables wp2r_posts et wp2r_postmeta :
DELETE m , p FROM wp2r_posts p INNER JOIN wp2r_postmeta m WHERE m.post_id= p.ID AND p.post_type="custom_post_type"
Tools
MySQL Workbench
HeidiSQL
HeidiSQL runs fine on Windows 8 and 10 (and on Windows 7 + 11 with some minor issues).
Tora
TOra is an open-source multi-platform database management GUI that supports accessing most of the common database platforms in use, including Oracle, MySQL, and Postgres, as well as limited support for any target that can be accessed through Qt's ODBC support. TOra has been built for various Linux distributions, Mac OS X, MS Windows, and UNIX platforms.
In addition to regular query and data browsing functionality, it includes several additional tools useful for database administrators and developers – which aims to help the DBA or developer of database application. Features PL/SQL debugger, SQL worksheet with syntax highlighting, DB browser and a comprehensive set of DBA tools.