1. Используйте предложение SELECT для многотабличного запроса
SELECT 字段名 FROM 表1,表2 … WHERE 表1.字段 = 表2.字段 AND 其它查询条件
SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a.id=b.id
Примечание. В приведенном выше коде две таблицы связаны с той же информацией поля идентификатора, что и условие, но это не следует использовать в фактической разработке, лучше всего использовать ограничения первичного и внешнего ключа для достижения
Многосторный запрос
как:
SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 a,tb_demo065_tel b WHERE a.id=b.id AND b.id='$_POST[textid]'
В языке SQL есть два способа указать псевдоним для таблицы.
Первый определяется ключевым словом AS, например
SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 AS a,tb_demo065_tel AS b WHERE a.id=b.id
Второй — добавить реализацию псевдонима таблицы сразу после имени таблицы.
SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 a,tb_demo065_tel b WHERE a.id=b.id
Есть несколько моментов, на которые следует обратить внимание при использовании псевдонимов таблиц.
-
Псевдоним обычно представляет собой сокращенное имя таблицы, используемое для ссылки на определенный столбец в таблице в объединении. Если столбец с таким же именем существует в нескольких таблицах в объединении, имя столбца должно быть дополнено именем таблицы или псевдонимом таблицы.
-
Если вы определите псевдоним таблицы, вы больше не сможете использовать имя таблицы
Три Объединить несколько наборов результатов
В языке SQL результаты запроса нескольких операторов SELECT могут быть объединены и выведены через UNION или ALL.Эти два ключевых слова используются следующим образом:
UNION: с помощью этого ключевого слова результаты запроса нескольких операторов SELECT могут быть объединены и выведены, а повторяющиеся строки могут быть удалены.
ВСЕ: с помощью этого ключевого слова результаты запроса нескольких операторов SELECT могут быть объединены и выведены, но повторяющиеся строки не будут удалены.
При использовании ключевого слова UNION или ALL для объединения и вывода нескольких таблиц результаты запроса должны иметь одинаковую структуру и типы данных должны быть совместимыми.Кроме того, количество полей в двух таблицах должно быть одинаковым при использовании UNION, в противном случае в операторе SQL появится сообщение об ошибке.
e.x:SELECT id,name,pwd FROM tb_demo067 UNION SELECT uid,price,date FROM tb_demo067_tel
Четыре простых вложенных запроса
Подзапрос: Подзапрос SELECT — это запрос, который возвращает одно значение и представляет собой вложенные операторы SELECT, INSERT, UPDATE и DELETE или другие операторы запроса, которые можно использовать везде, где выражение может использовать подзапросы.
SELECT id,name,sex,date FROM tb_demo068 WHERE id in(SELECT id FROM tb_demo068 WHERE id='$_POST[test]')
Внутреннее соединение: результат запроса в качестве условия запроса предложения WHERE называется внутренним соединением.
Пять сложных вложенных запросов
Вложенные запросы между несколькими таблицами могут быть реализованы с помощью предиката IN, и синтаксис выглядит следующим образом:
test_expression[NOT] IN{
subquery
}
Описание параметра: test_expression относится к выражению SQL, а подзапрос содержит подзапрос результирующего набора.
Принцип многотабличного вложенного запроса: сколько бы таблиц ни было вложенных, между таблицами должна быть какая-то связь
Шесть вложенного запроса в приложении статистики запросов
При реализации многотабличного запроса можно одновременно использовать предикаты ANY, SOME и ALL.Эти предикаты называются предикатами количественного сравнения, и их можно использовать в сочетании с операторами сравнения, чтобы определить, удовлетворяют ли все возвращаемые значения условия поиска.Предикаты SOME и ANY являются экзистенциальными величинами, обратите внимание только на то, существует ли возвращаемое значение, удовлетворяющее условиям поиска, эти два предиката имеют одинаковое значение и могут использоваться взаимозаменяемо, предикат ALL называется общим предикатом, и его заботит только наличие предиката, удовлетворяющего требованиям поиска.
SELECT * FROM tb_demo069_people WHERE uid IN(SELECT deptID FROM tb_demo069_dept WHERE deptName='$_POST[select]')
SELECT a.id,a.name FROM tb_demo067 AS a WHERE id<3)
ANY больше, чем значение в подзапросе
=ANY больше или равно значению в подзапросе
=ANY равно значению в подзапросе
!=ANY или ANY не равно значению в подзапросе
ALL больше всех значений в подзапросе
=ALL больше или равно всем значениям в подзапросе
=ALL равно всем значениям в подзапросе
!=ALL или ALL не равны всем значениям в подзапросе
7. Используйте подзапросы в качестве производных таблиц
В реальном процессе разработки проекта часто используется для получения информационной таблицы, содержащей лишь несколько ключевых полей, из таблицы с относительно полной информацией.Эта цель может быть достигнута с помощью подзапросов, таких как
SELECT people.name,people.chinese,people.math,people.english FROM (SELECT name,chinese,math,english FROM tb_demo071) AS people
Примечание. Подзапросы должны соответствовать следующим правилам:
(1) Внесенные по внутреннему запросу оператора сравнения содержит только одно название подсигулирования или столбца, где предложение в операторе, названном во внешней строке, должна запросить столбец имя и совместимый внутренний слой
(2) Подзапросы, введенные нераспознанными операторами сравнения (оператор сравнения не следует за ключом или всем), не включают предложения Group By или Have, если группа или отдельное значение не определены заранее.
(3) Список SELECT, введенный EXISTS, обычно состоит из *, и нет необходимости указывать имя столбца.
(4) Подзапросы не могут обрабатывать свои результаты внутри
8. Использование подзапросов в качестве выражений
SELECT (SELECT AVG(chinese)FROM tb_demo071),(SELECT AVG(english)FROM tb_demo071),(SELECT AVG(math)FROM tb_demo071) FROM tb_demo071
Примечание. Лучше использовать псевдоним для элемента списка при использовании подзапроса, чтобы пользователь мог присвоить значение элементу таблицы при использовании функции mysql_fetch_array(), например
SELECT (SELECT AVG(chinese) FROM tb_demo071) AS yuwen ,(SELECT AVG(english) FROM tb_demo071) AS yingyu,(SELECT AVG(math) FROM tb_demo071) AS shuxue FROM tb_demo071
9 Использование подзапросов для связи данных
SELECT * FROM tb_demo072_student WHERE id=(SELECT id FROM tb_demo072_class WHERE className = '$_POST[text]')
Совместный запрос более десяти таблиц
Используя UNION в операторе SQL, уточненные данные в разных таблицах могут отображаться в одном столбце.
e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten
Примечание. При использовании UNION следует обратить внимание на следующие два момента:
(1) В операторе, объединенном с оператором UNION, количество выражений во всех списках выбора должно быть одинаковым, например, имена столбцов, арифметические выражения и агрегатные функции.
(2) В каждой таблице запросов структура данных соответствующего столбца должна быть одинаковой.
11 Сортировка объединенных результатов
Для совместимости операций UNION требуется, чтобы все операторы SELECT не могли иметь операторы ORDER BY, за одним исключением, то есть с размещением предложения ORDER BY в последнем операторе SELECT для достижения окончательного отсортированного вывода результатов.
e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten ORDER BY id
Использование условий UNION является относительно жестким, поэтому при использовании этого оператора вы должны обратить внимание на то, совпадают ли число и тип поля двух элементов таблицы.
Двенадцать операторов условного объединения
SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name='人民邮电出版社' OR name='机械工业出版社' UNION SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name <>'人民邮电出版社' AND name <>'机械工业再版社' ORDER BY id
Приведенный выше оператор применяет оператор группировки GROUP BY и оператор HAVING для реализации условного объединенного запроса. Его цель - сначала обеспечить, чтобы «Издательство народной почты и телекоммуникаций» и «Издательство машиностроения» всегда были в первых рядах списка, а затем экспортировать другие издательства.
Тринадцать простых запросов на внутреннее соединение
SELECT filedlist FROM table1 [INNER] JOIN table2 ON table1.column1 = table2.column1
Среди них fieldlist — это отображаемое поле, INNER указывает, что соединение между таблицами является внутренним соединением, а table1.column1=table2.column1 используется для указания условий соединения между двумя таблицами, например:
SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id
Четырнадцать сложных запросов на внутреннее соединение
Комплексные внутренние соединения, затем прикрепите некоторое запрос на основной запрос в запросе присоединения, например:
SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id WHERE b.id=(SELECT id FROM tb_demo065 WHERE tb_demo065.name='$_POST[text]')
Короче говоря, суть реализации ассоциации между таблицами заключается в том, что между двумя таблицами есть общие элементы данных или одни и те же элементы данных, и две таблицы связаны предложением WHERE или оператором внутреннего соединения INNER JOIN ... ON для реализовать запрос
15. Используйте внешнее соединение для реализации совместного запроса с несколькими таблицами.
(1) ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ означает, что таблицы соединены друг с другом через левое соединение, а также может быть сокращено как ЛЕВОЕ СОЕДИНЕНИЕ, Информация в таблице справа будет выводить только ту информацию, которая соответствует условиям, и возвращает NULL за информацию, не соответствующую условиям
e.x:SELECT a.name,a.address,b.math,b.english FROM tb_demo065 AS A LEFT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id
(2) ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ означает, что таблицы соединены друг с другом через правое соединение, а также может быть сокращено как ПРАВОЕ СОЕДИНЕНИЕ.Информация в левой таблице будет выводить только ту информацию, которая соответствует условиям, и возвращает NULL для информация, не соответствующая условиям
E.X:SELECT a.name,a.address,b.math,b.english FROM tb_demo065 AS A RIGHT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id
16. Используйте ключевое слово IN или NOTIN, чтобы ограничить область действия
e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code BETWEEN '$_POST[text1]' AND '$_POST[text2]')
Используйте IN, чтобы указать запрос в пределах диапазона.Если вы хотите запросить за пределами определенного диапазона, вы можете вместо этого использовать NOT IN.
Семнадцать коррелированных подзапросов, представленных IN
e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code = '$_POST[text]')
Пакетная фильтрация с использованием данных восемнадцати операторов HAVING
Предложение HAVING используется для указания условий поиска для групп или агрегатов.HAVING обычно используется с оператором GROUP BY.Если оператор SQL не содержит предложения GROUP BY, HAVING ведет себя так же, как предложение WHERE.
e.x:SELECT name,math FROM tb_demo083 GROUP BY id HAVING math > '95'