Глава VII, Advanced Database Query

Глава VII, Advanced Database Query

Краткое описание:

1. расширение функции запроса данных Общего мастера

2. Мастер-запрос, пересечение, разность операция

3. Мастер использование подзапросов

4. Знать некоторые другие вопросы

расширение функции запроса данных Раздел I Общие

1.1. ЗЕЬЕСТ

//SQL的一般查询语句
SELECT [DISTINCT] [TOP n] select_list 
//将查询的结果插入到了一个表中
[INTO new_table]  
//需要查询的表
[FROM table_source]
//查询的条件
[WHERE search_conditition]
//对查询的结果进行分组
[GROUP BY group_by_expression]
//指定组或聚合函数的查找条件
[HAVING search_condition]
//对查询的结果进行排序
[ORDER BY order_expression [ASC|DESC]]
//对查询结果结果后面生成汇总数据行
[COMPUTE expression] 

1.2. TOP ограничить использование результирующего набора

ТОП п [процентов] [со связями]

• Top п п линия фронта

• Вверх п [процентов] п% передний ряд

• [С] СВЯЗЯМИ: в том числе результатов последней строки значения привязанного.

Пример:

【例1】查询单价最高的前三种商品的商品名、商品类别和单价,包括并列情况。

SELECT TOP 3 WITH TIES GoodsName, GoodsClassName,SaleUnitPrice,FORM Table_Goods a JOIN Table_GoodsClass b
ON a.GoodsClassID=b.GoodsClassID ORDER BY SaleUnitPrice DESC

1.3. Функции использования CASE-

  • Очки отображать различные типы данных. Функция случае является выражением мульти-ветви.

  • Два типа:

  1. Простая функция СЛУЧАЙ
  2. Функция поиска СЛУЧАЙ

Синтаксис:

CASE
 WHEN 布尔表达式1 then 结果表达式1
 WHEN 布尔表达式2 then 结果表达式2
 ……
 WHEN 布尔表达式n then 结果表达式n
 [ELSE 结果表达式n+1]
END

Корпус:

Анализ роли следующих утверждений (Р110)

SELECT a.GoodsID,商品销售类别=CASE 
WHEN COUNT(b.GoodsID)>10 THEN ‘热门商品’
WHEN COUNT(b.GoodsID)BETWEEN 5 AND 10 THEN ‘一般商品’
WHEN COUNT(b.GoodsID)BETWEEN 1 AND 4 THEN ‘难销商品’
ELSE ‘滞销商品’
END
FROM Table_Goods a LEFT JOIN Table_SaleBillDetail b
ON a.GoodsID=b.GoodsID GROUP BY a.GoodsID

1.4. Сохранение результатов запроса в новой таблице

ВЫБРАТЬ запрос списка последовательность INTO <новое имя таблицы>

...... от источника данных (другой сетевой фильтр, группировка отчетности)

Примечание: имя таблицы плюс # местных временных таблиц, глобальные временные таблицы ##, только таблица называется постоянной таблицы.

Временные таблицы могут только доступны в настоящее время запрос

例子: SELECT * INTO #HD_Customer FROM Table_Customer WHERE ......

Раздел II из результатов запроса, пересечение, разность операции

2.1. А операция

  • А операция (СОЕДИНЕНИЕ): множество результатов запроса в виде комбинированного набора результатов. ,

  • Синтаксис:

SELECT 语句1
    UNION [ALL]
SELECT 语句2
    UNION [ALL]
 ……

Использование UNION Примечание:

  • Для объединения запроса, выберите количество столбцов должны быть одинаковыми, те же семантика.

  • Колонка, соответствующая каждому типа данных совместима неявно, например, полукокс (20) и VARCHAR (40).

  • Совокупные результаты первых заголовков столбцов с помощью инструкции SELECT.

  • Для заказа, то GROUP BY заявления написано после последнего SELECT, и своего рода заявления, это имена столбцов в первой SELECT.

2.2. операция пересечения

  • депозитная операция: записи, возвращаемые при одновременном возникновении двух множеств.

  • Синтаксис:

SELECT 语句1
    INTERSECT 
SELECT 语句2
    INTERSECT ……
SELECT 语句n

2,3. операция Difference

  • Расчет Difference: Возвращает первый набор и второй набор не имеет никаких записей.

  • Синтаксис:

SELECT 语句1
EXCEPT 
SELECT 语句2
EXCEPT……
SELECT 语句n

Раздел коррелируется подзапрос

  • Подзапрос является SELECT, заявление, содержащееся в другом в ЗЕЬЕСТ. Наружный слой называется внешний запрос ЗЕЬЕСТ, ЗЕЬЕСТ внутреннего слоя называется внутренний запрос (или подзапрос).

  • Подзапросы всегда пишется в скобках.

ЗЕЬЕСТ включает подзапрос в основном использует один из следующих форматов:

(1) где выражение [NOT] IN (подзапрос)

(2) WHERE выражение comparison_operator [ANY | ВСЕ]

(3) где [НЕ] EXISTS (подзапрос)

Корпус:

1,

Использование суб-запросы на основе тестового набора

Ван люди с запросами и регионами, в дополнение к Ван

SELECT Cname,Address 
FROM Table_Customer
WHERE Address   IN(
    SELECT Address 
    FROM Table_Customer  
    WHERE Cname=‘王晓’)
AND Cname!= ‘王晓’

2,

Использование сравнительного теста суб-запрос

Самая высокая цена за единицу товаров запроса имени и цены за единицу товара

SELECT Goodname,SaleUnitPrice 
FROM Table_Goods a 
WHERE SaleUnitPrice=
(
    SELECT MAX(SaleUnitPrice) 
    FROM Table_Goods
)

3,

Используйте существование теста суб-запроса

Запрос цены Купить членство номер выше, чем 2000 юаней товарооборота клиентов.

SELECT DISTINCT CardID 
FROM Table_SaleBill 
WHERE EXISTS(
    SELECT * 
    FROM Table_SaleBillDetail 
    WHERE SaleBillID=Table_SaleBill.SaleBillID 
    AND UnitPrice>2000
)

Раздел IV Другие формы подзапроса

4.1. Подзапросы альтернативные выражения

  Встроенный в подзапрос возвращает только скалярное значение в списке выбора SELECT.

Пример:

SELECT Cname,Address,(
    SELECT COUNT(*) 
    FROM Table_Customer b ON a.CardID=b. CardID 
    WHERE CustomerID=‘C001’
)AS TotalTimes 
FROM Table_Custmer 
Where CustomerID=‘C001’

4.2. Производная таблица

  • Также называется рядный вид подзапрос обрабатывается как таблица, новая таблица генерируется является «производной таблицы.»

Пример:

Откройте для G001 и G002, чтобы купить по крайней мере, два товара номер клиента и имя клиента.

SELECT CustomerID,CName 
FROM (
    SELECT * 
    FROM Table_SaleBill a  JOIN Table_SaleBillDetail b 
    ON  a.SaleBillID=b. SaleBillID 
    WHERE  GoodsID=‘G001’
) AS T1 JOIN (
    SELECT * 
    FROM Table_SaleBill a                           
    JOIN Table_SaleBillDetail b ON  a.SaleBillID=b. SaleBillID 
    WHERE   GoodsID=‘G002’
) AS T2
ON T1.CardID=T2.CardID
JOIN Table_Customer c ON c.CardID=T1. CardID

Раздел V Другие запросы

5.1. Windowing функция

  • В SQL Server, набор строк называется окном.

  • В зависимости от полимеризации, функция оконного устанавливается в расчете полимеризации набор строк, но это не так часто агрегатных функция возвращает только одно значение на каждую группу, функция оконного может возвращать несколько значений для каждой группы, так как функция оконного выполняется Rowset полимеризуемой группа рассчитывается окно.

  • Функция Полимеризации отличается, оконной функцией после полимеризации добавляет функцию OVER ключевого слово.

  • Windowing формата вызов функции:
    имя функции (столбец) OVER (опция)
    • OVER Ключевое слово: Указывает функцию в качестве оконной функции вместо функции совокупного.
    • Стандарт SQL позволяет все агрегатные функции, используемые функции кадрирования, используя ключевое слово OVER, чтобы различать между этими двумя применениями.

Пример 1:

Чрезмерные слова, используемые в сочетании с полимерной функцией

  С учебной программой курса (СМО, CName, кредит, семестр) запроса полный курс СМО, CName, Семестр, кредитной информации и семестровых курсов общей, самый высокий, средний, минимальный кредит.

SELECT Cno,CName,Semester ,Credit
SUM(Credit) OVER(PARTITION BY Semester) AS ‘Total’,
AVG(Credit) OVER(PARTITION BY Semester) AS ‘Avg’,
MIN(Credit) OVER(PARTITION BY Semester) AS ‘Min’,
MAX(Credit) OVER(PARTITION BY Semester) AS ‘Max’,
FROM Course

Пример 2:

OVER пункт будет использоваться в сочетании с функцией ранжирования

  • Оценка функции RANK ()
RANK() OVER([<partition_by_clause>,…[n]]<order_by_clause>)
  • Примечание: Функция ранжирования является неопределенной.

1 рейтинг с самого начала, не обязательно последовательных целых чисел.

SELECT OrderID, ProductID, OrderQty 
    RANK() OVER(PARTITION BY OrderID ORDER  BY  OrderQty DESC ) 
    AS RANK
FROM OrderDetail
ORDER  BY OrderID 

Другие функции ранжирования

  • DENSE_RANK ()

Он занимает последовательные целые числа

  • NTILE ()

Упорядоченное разбиение разделительной линии на заданное число групп, нумерации, начиная с 1, функция возвращает номер этой группы строк принадлежит.

  • ROW_NUMBER ()

Возврат результирующего набора серийный номер для каждого раздела, каждый раздел первой строки с самого начала.

5.2. Общие табличные выражения

  • Общие табличные выражения (CommonTableExpression, КТР):

Результат запроса установлен, чтобы указать временное имя, имя результирующего набора является общим выражением таблицы.

  • Формат:
WITH <common_table_expression>[,…n]
<common_table_expression>::=
Expression_name[(column_name [,…n])]
AS
(SELECT语句)

Пример:

Определить статистику для каждого члена купить КТР от общего количества товаров, а также использование КТР номера участника запроса и количества купленных товаров.

Определение:

WITH BuyCount(CardID,Counts)
AS(SELECT CardID,Count(*) 
   FROM Table_SaleBill 
   GROUP BY CardID 
  )

Использование:

AS(
    SELECT CardID,Counts 
    FROM BuyCount 
    ORDER BY Counts
)

Пример:

1,

1.设某数据库中有旅客表A(旅客编号,城市)和旅客表B(旅客编号,城市),现将所有旅客的数据存储这两张表中。请补全如下查询语句,使得该查询语句能查询所有旅客所在的全部的不重复的城市。
SELECT 城市 FROM 旅客表A
(  )
SELECT 城市 FROM 旅客表B
答案: UNION

2,

2.设有购买表(顾客号,商品号,购买时间)。现要查询顾客A与顾客B购买的相同商品。有下列查询语句:
Ⅰ.
SELECT 商品号 FROM  购买表 WHERE 顾客号 = 'A'
AND 商品号 IN (SELECT 商品号 FROM  购买表 WHERE 顾客号 = 'B')
Ⅱ.
SELECT 商品号 FROM  购买表 WHERE 顾客号 = 'A'
        EXCEPT
SELECT 商品号 FROM  购买表 WHERE 顾客号 = 'B‘
Ⅲ.
SELECT 商品号 FROM  购买表 WHERE 顾客号 = 'A'
        INTERSECT
SELECT 商品号 FROM  购买表 WHERE 顾客号 = 'B'
Ⅳ.
SELECT 商品号 FROM  购买表 WHERE 顾客号 = 'A'
        UNION
SELECT 商品号 FROM  购买表 WHERE 顾客号 = 'B' 

上述语句中,能够实现该查询要求的是(  )。
A.仅Ⅰ和Ⅱ
B.仅Ⅰ和Ⅲ
C.仅Ⅰ和Ⅳ
D.仅Ⅲ
答案:B

3,

3.设有选课表(学号,课程号,成绩),现要统计每门课程的选课人数,并将结果保存到新表:选课情况表。下列语句中正确的是(      )。
A.
SELECT 课程号, COUNT(*) 选课人数 FROM 选课表 INTO 选课情况表GROUP BY 课程号
B.
SELECT 课程号, COUNT(*) 选课人数 INTO 选课情况表 FROM 选课表 GROUP BY 课程号
C.
SELECT 课程号, COUNT(*) FROM 选课表 INTO 选课情况表(课程号,选课人数)GROUP BY 课程号
D.
SELECT 课程号, COUNT(*) INTO 选课情况表(课程号, 选课人数)
FROM 选课表 GROUP BY 课程号
答案:B

4,

4.设某数据库中有学生表(学号,姓名,所在系)和选课表(学号,课程号,成绩)。现要查询没选课的学生姓名和所在系。下列语句中能够实现该查询要求的是(  )。
A.SELECT姓名,所在系FROM学生表a LEFT JOIN选课表b
ON a.学号=b.学号WHERE a.学号IS NULL
B.SELECT姓名,所在系FROM学生表a LEFT JOIN选课表b
ON a.学号=b.学号WHERE b.学号IS NULL
C.SELECT姓名,所在系FROM学生表a RIGHT JOIN选课表b
ON a.学号=b.学号WHERE a.学号IS NULL
D.SELECT姓名,所在系FROM学生表a RIGHT JOIN选课表b
ON a.学号=b.学号WHERE b.学号IS NULL
答案:B

5,

5.设在SQL Server2008中,用户U1在DB1数据库中创建了#Temp表。下列关于#Temp表的说法中,正确的是(  )。
A.在所有用户U1发起的连接中,都可以查询#Temp表数据
B.只有在创建#Temp表的连接中才可以查询#Temp表数据
C.在创建#Temp表的连接未断开时,DB1数据库的所有用户都可以查询#Temp表数据
D. 在创建#Temp表的连接断开时,DB1数据库的所有用户仍可以查询#Temp表数据
答案:B

6,

В библиотеке приложений с базой данных SQL Server 2008 имеет три основных таблиц, структура таблицы будет показана ниже, пожалуйста, заполните следующие два запроса в заявлении SQL:

ЗАЕМЩИКА:

Библиотека номер карты Полное имя название отдела класс
12011106 Цзян Huiwen Факультет компьютерных наук 12-1
12011107 Ван Ли Факультет компьютерных наук 12-1
12012113 Вентилятор Yuanyuan Отдел информации 12-2
...... ...... ...... ......

КРЕДИТЫ:

Библиотека номер карты Библиотека регистрационный номер Заимствование дата
12011106 T001001 2012.01.02
12012113 T001026 2013.02.06
...... ...... ......

КНИГИ:

шифр титульный автор Книга регистрационный номер пресс цена
TP311.1 система баз данных Ли Мин T001001 наука 19,00
TP311.2 C Язык Ван Шань T001026 люди 32,00
...... ...... ...... ...... ...... ......

(1) получение библиотечной карточки, чтобы занимать по крайней мере пять книг студентов, имя, название отдела и библиотеке номера.

Одинаковые имена студентов в какой-либо одной книге (2) извлечение библиотеки и заимствованные одноклассники Ван Ли, название отдела, название и дата заимствования.

1,

SELECT LOANS.借书证号,姓名,系名,COUNT(*) 
AS 借书数量
FROM BORROWER,LOANS
WHERE BORROWER.借书证号=LOANS.借书证号
GROUP BY LOANS.借书证号
HAVING COUNT(*)>=5;

2,

SELECT 姓名,系名,书名,借书日期
FROM  BORROWER,LOANS , BOOKS  
WHERE
 BORROWER.借书证号=LOANS.借书证号 
 AND LOANS.图书登记号=BOOKS.图书登记号
AND 索书号 IN
(
    SELECT 索书号 FROM BORROWER,LOANS,BOOKS 
    WHERE BORROW.借书证号=LOANS.借书证号 
    AND LOANS.图书馆登记号=BOOKS.图书登记号
    AND 姓名="王丽"
)

рекомендация

отwww.cnblogs.com/shaoyayu/p/12355331.html