Ярлыки

.htaccess (4) тестирование (8) шаблоны проектирования (3) css (5) Debian (6) docker (2) Doctrine2 (6) Git (6) html (4) java (6) javascript (13) jquery (11) LFS (3) linux (23) mac os (4) mod_rewrite (2) MSSQL (4) MySQL (18) ORM Doctrine (17) patterns (3) PDO (3) perl (7) PHP (64) PHPUnit (8) Python (15) SEO (2) Silex (1) SimpleXML (1) SQL (14) ssh (4) Ubuntu (24) Yii1 (1) Zend Framework (19) ZendFramework2 (8)

понедельник, 4 апреля 2011 г.

Transact-SQL. Примеры.

Переменные


USE TestDatabase
-- Объявление переменных
DECLARE @EmpID INT, @EmpName VARCHAR(40)
-- Задание значения переменной @EmpID
SET @EmpID = 1
-- Задание значения переменной @EmpName
SELECT @EmpName = UserName FROM Users WHERE UserID = @EmpID
-- Вывод переменной @EmpName в результат запроса
SELECT @EmpName AS [Employee Name]
GO

-- Примечание. В этом примере используется группировка слов в переменную — конструкция [Employee Name] 
-- воспринимается как одна переменная, так как слова заключены в квадратные скобки


Системные функции


USE TestDatabase
-- Использование агрегативной функции для подсчета средней зарплаты
SELECT AVG(BaseSalary) AS [Average salary] FROM Positions
GO
-- Использование скалярной функции для получения имени базы данных
SELECT DB_NAME() AS [DATABASE name]
GO
-- Использование скалярной функции для получения имени текущего пользователя
DECLARE @MyUser CHAR(30)
SET @MyUser = USER_NAME()
SELECT 'The current user''s database username is: '+ @MyUser
GO
-- Использование функции-указателя для получения данных с другого сервера
SELECT * FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM owner.titles')
GO


Выражения


USE TestDatabase
-- Использование DDL
CREATE TABLE TempUsers (UserID INT, UserName NVARCHAR(40), DepartmentID INT)
GO
-- Использование DCL
GRANT SELECT ON Users TO PUBLIC
GO
-- Использование DML
SELECT UserID, UserName + ' ' + UserSurname AS [USER FULL Name] FROM Users
GO
-- Использование DDL
DROP TABLE TempUsers
GO


Динамическое конструирование выражений

USE master
-- Задание динамических данных
DECLARE @dbname varchar(30), @tablename varchar(30)
SET @dbname = 'TestDatabase'
SET @tablename = 'Positions'
SET @column = 'BaseSalary'
-- Использование динамических данных
EXECUTE ('USE ' + @dbname + ' SELECT AVG(' + @column + ')
  AS [Average salary] FROM @tablename ' + @tablename)
GO

Выборка


В строке сравнения разрешается использовать подстановочные символы:
% - любое количество символов;
_ - один символ;
[] – любой символ, указанный в скобках;
[^] – любой символ, не указанный в скобках.
-- Выбрать все записи из таблицы Users, у кого в имени вторая буква не V
SELECT * FROM Users WHERE UserName LIKE '_[^v]%'

-- Выбрать записи колонок UserName и UserSurname из таблицы Users, у кого 
-- PositionID между 2 и 3, результирующую колонку назвать Full name.
SELECT [UserName] + ' ' + [UserSurname] AS 'Full name' FROM Users
  WHERE PositionID BETWEEN 2 AND 3

-- Сосчитать суммарную зарплату отдела с идентификатором 1
DECLARE @DepID int
SET @DepID = 1
SELECT DepartmentName AS 'Department name',
    (SELECT SUM(Positions.BaseSalary) FROM Positions
       INNER JOIN Users ON Users.PositionID = Positions.PositionID
       WHERE Users.DepartmentID = @DepID
    ) AS 'Summary salary'
  FROM Departments
  WHERE DepartmentID = @DepID

Аналог LIMIT в MySQL

SELECT TOP 10 * FROM MY_TABLE
-- аналогично
SELECT * FROM MY_TABLE LIMIT 10

Комментариев нет:

Отправить комментарий