Урок 1. создание объектов базы данных и отправка запросов к нимlesson 1: create and query database objects
Содержание:
- MySQL CREATE TABLE syntax
- SQL Учебник
- Список заданий
- Создание таблицы — путем копирования выбранных столбцов из нескольких таблиц
- Задание «Компьютерный магазин»
- Типы данных в MySQL
- SQL References
- SQL Учебник
- How to Use SQL CREATE TABLE AS Statement
- Пример
- Список заданий для базы данных «Компьютерный магазин»
- Syntax
- Предусловия
- 1.2.1. Оператор CREATE TABLE
- SQL References
MySQL CREATE TABLE syntax
The statement allows you to create a new table in a database.
The following illustrates the basic syntax of the statement:
Let’s examine the syntax in greater detail.
First, you specify the name of the table that you want to create after the keywords. The table name must be unique within a database. The is optional. It allows you to check if the table that you create already exists in the database. If this is the case, MySQL will ignore the whole statement and will not create any new table.
Second, you specify a list of columns of the table in the section, columns are separated by commas.
Third, you can optionally specify the storage engine for the table in the clause. You can use any storage engine such as InnoDB and MyISAM. If you don’t explicitly declare a storage engine, MySQL will use InnoDB by default.
InnoDB became the default storage engine since MySQL version 5.5. The InnoDB storage engine brings many benefits of a relational database management system such as ACID transaction, referential integrity, and crash recovery. In the previous versions, MySQL used MyISAM as the default storage engine.
The following shows the syntax for a column’s definition:
Here are the details:
- The specifies the name of the column. Each column has a specific data type and optional size e.g.,
- The constraint ensures that the column will not contain . Besides the constraint, a column may have additional constraint such as CHECK, and UNIQUE.
- The specifies a default value for the column.
- The indicates that the value of the column is incremented by one automatically whenever a new row is inserted into the table. Each table has a maximum one column.
After the column list, you can define table constraints such as UNIQUE, CHECK, PRIMARY KEY and FOREIGN KEY.
For example, if you want to set a column or a group of columns as the primary key, you use the following syntax:
SQL Учебник
SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии
Список заданий
# | Задание | Сложность | ||
---|---|---|---|---|
1 | Вывести классы всех кораблей США. Вывод: страна, класс | 1 | ||
2 | Перечислить названия всех кораблей, имеющихся в базе. Упорядочить их по алфавиту | 1 | ||
3 | Перечислить все сражения и их даты, упорядочить по дате | 1 | ||
4 | Найти все корабли (из таблицы ), имена классов которых заканчиваются на букву «о». Упорядочить по названию | 1.1 | ||
5 | Найти все корабли, имена классов которых заканчиваются на букву «о», но не «го» | 1.1 | ||
6 | Найти все корабли, название которых начинается на букву «М» | 1.1 | ||
7 | Вывести максимальное число орудий | 1.2 | ||
8 | Вывести минимальный калибр | 1.2 | ||
9 | Вывести средний показатель водоизмещения, используя функцию | 1.2 | ||
10 | Удалить сведения о классах кораблей в таблице , у которых число орудий равно 1 | 2 | ||
11 | Удалить из таблицы Сражения битву, которая произошла 12.12.1924 | 2 | ||
12 | Удалить сведения о корабле, который был спущен на воду в 1872 году | 2 | ||
13 | Измените результат битвы, в которой участвовал корабль Киришима, на «Поврежден» | 3 | ||
14 | В таблице Корабли измените название корабля «Мирури» на «Мисури» | 3 | ||
15 | Установите число орудий для класса «Мото» равный 3 | 3 | ||
16 |
По Вашингтонскому международному договору от начала 1922 г. запрещалось строить линейные корабли водоизмещением более 35 тыс.тонн. Укажите корабли, нарушившие этот договор (учитывать только корабли с известным годом спуска на воду). Вывести названия кораблей и водоизмещение Показать решение:
|
4 | ||
17 | Укажите название корабля, участвовавшего в Битве А | 4 | ||
18 |
Определить названия всех кораблей из таблицы , которые удовлетворяют, по крайней мере, комбинации любых четырех критериев из следующего списка: число орудий = 8, калибр = 15, водоизмещение = 32000, тип = bb, год спуска = 1915, класс = Конго, страна = США Показать решение:
|
4 |
Создание таблицы — путем копирования выбранных столбцов из нескольких таблиц
Синтаксис
Синтаксис CREATE TABLE AS, для копирования столбцов из нескольких таблиц в Oracle PL/SQL:
CREATE TABLE new_table AS (SELECT column_1, column2, … column_n FROM old_table_1, old_table_2, … old_table_n);
Пример
Рассмотрим пример CREATE TABLE AS, который показывает, как создать таблицу путем копирования выбранных столбцов из нескольких таблиц. Например:
Oracle PL/SQL
CREATE TABLE suppliers
AS (SELECT companies.company_id, companies.address, categories.category_type
FROM companies, categories
WHERE companies.company_id = categories.category_id
AND companies.company_id < 5000);
1 2 3 4 5 |
CREATETABLEsuppliers AS(SELECTcompanies.company_id,companies.address,categories.category_type FROMcompanies,categories WHEREcompanies.company_id=categories.category_id ANDcompanies.company_id<5000); |
В этом примере будет создана новая таблиц с наименованием suppliers на основе столбцов определенных из двух таблиц companies и categories (company_id, address, category_type).
Задание «Компьютерный магазин»
SQL table 2. Используя сервис http://dbdesigner.net/ и команду создайте при помощи языка SQL базу данных «Компьютерный магазин» со следующими таблицами и связями между их полями:
Дополните код (для таблиц и ):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
CREATE TABLE `Product` ( `Номер` INT(11) NOT NULL AUTO_INCREMENT, `Производитель` VARCHAR(35), `Тип` VARCHAR(35), PRIMARY KEY (`Номер`) ); CREATE TABLE `Printer` ( `code` BIGINT NOT NULL, `Номер` BIGINT NOT NULL, `Цветной` bool, `Тип` VARCHAR(24) DEFAULT 'Лазерный', `Цена` INT, PRIMARY KEY (`code`) ); |
* Сохраните сгенерированный код базы данных для дальнейшей работы ()
SQL table 3. Заполните созданную базу данных, чтобы в дальнейшем иметь возможность создавать запросы к ней. Для заполнения используйте сервис :
— создайте новую базу данных;
— через SQL создайте таблицы базы данных, использовав код из предыдущего задания (вставить код в окно для SQL запросов интерфейса phpMyAdmin);
— заполните таблицы данными:Таблица Продукт:
Номер | Производитель | Тип |
---|---|---|
1 | Америка | Компьютер |
2 | Африка | Компьютер |
3 | Россия | Компьютер |
4 | Россия | Принтер |
5 | Япония | Принтер |
6 | Америка | Компьютер |
7 | Россия | Ноутбук |
8 | Китай | Принтер |
9 | Америка | Компьютер |
10 | Китай | Ноутбук |
Таблица PC:
code | Номер | Скорость | Память | HD | СкоростьСчит | Цена |
---|---|---|---|---|---|---|
1 | 1 | 1100 | 1000 | 500 | 52 | 20000 |
2 | 2 | 1500 | 2000 | 500 | 52 | 25000 |
3 | 3 | 1500 | 2000 | 1000 | 49 | 28000 |
4 | 6 | 2000 | 2500 | 1000 | 52 | 29000 |
5 | 9 | 2000 | 3000 | 1000 | 52 | 32000 |
Таблица Ноутбук:
code | Номер | Скорость | Память | HD | Экран | Цена |
---|---|---|---|---|---|---|
1 | 7 | 2000 | 2000 | 512 | 19 | 25000 |
2 | 10 | 2000 | 3000 | 1000 | 24 | 35000 |
Таблица Принтер:
code | Номер | Цветной | Тип | Цена |
---|---|---|---|---|
1 | 4 | 1 | Лазерный | 15000 |
2 | 5 | Струйный | 2000 | |
3 | 8 | Лазерный | 4000 |
* При отсутствии возможности работы с phpMyAdmin, воспользуйтесь сервисом sql fiddle.
Типы данных в MySQL
В следующей таблице приведены наиболее часто используемые типы данных, поддерживаемые MySQL.
INT | Хранит числовые значения в диапазоне от -2147483648 до 2147483647. |
DECIMAL | Хранит десятичные значения. |
CHAR | Хранит строки фиксированной длины с максимальным размером 255 символов. |
VARCHAR | Хранит строки переменной длины с максимальным размером 65 535 символов. |
TEXT | Хранит строки с максимальным размером 65 535 символов. |
DATE | Сохраняет значения даты в формате ГГГГ-ММ-ДД. |
DATETIME | Сохраняет объединенные значения даты/времени в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС. |
TIMESTAMP | Хранит значения меток времени. Значения TIMESTAMP хранятся в виде количества секунд с начала эпохи Unix (1970-01-01 00:00:01 UTC). |
Существует несколько дополнительных ограничений (также называемых модификаторами), которые установлены для столбцов таблицы в предыдущем выражении. Ограничения определяют правила, касающиеся значений, разрешенных в столбцах.
- Ограничение NOT NULL гарантирует, что поле не может принять значение NULL.
- Ограничение PRIMARY KEY помечает соответствующее поле как первичный ключ таблицы.
- Атрибут AUTO_INCREMENT является расширением MySQL для стандартного SQL, который сообщает MySQL, что нужно автоматически присваивать значение этому полю, если оно не указано, путем увеличения предыдущего значения на 1. Доступно только для числовых полей.
- Ограничение UNIQUE гарантирует, что каждая строка для столбца должна иметь уникальное значение.
Вы узнаете больше об ограничениях MySQL в следующих статьях.
SQL References
SQL Keywords
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL Functions
String Functions
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Numeric Functions
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Date Functions
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Advanced Functions
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server Functions
String Functions
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Numeric Functions
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Date Functions
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Advanced Functions
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access Functions
String Functions
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Numeric Functions
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Date Functions
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Other Functions
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL Quick Ref
SQL Учебник
SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии
How to Use SQL CREATE TABLE AS Statement
To create a new table, you need to find the new table columns matches with the required table. If all the columns match with the table, you use all the columns of the old table to create a new table.
Let’s create a table with the syntax and examples given below for each type.
Create Table By Copying All the Columns From Another Table
You have to use the SQL SELECT statement to select the columns you want to use and create the new table. Apply the condition for the data you want to get from the old table. If the old table contains the records or some data, the newly created table also copy the data from the old table.
Syntax
CREATE TABLE new_tablename AS(
SELECT * from old_tablename where condition;
);
1 |
CREATE TABLE new_tablename AS( SELECT *from old_tablename where condition; ); |
This example can be useful as you don’t need to specify the columns names with the data type. The above syntax can contain the WHERE condition to copy all the required records from the old table. In addition to this, you also don’t need to insert each record one by one.
Create Table By Copying Only The Selected Columns From Another Table
You can specify only those column names which you want to copy to the new table. To specify the column names, you need to only the required column names in the syntax given below. You can include as many column as you want.Syntax
CREATE TABLE new_tablename AS(
SELECT column1, column2, column3…columnN
from old_tablename;
);
1 |
CREATE TABLE new_tablename AS( SELECT column1,column2,column3…columnN from old_tablename; ); |
Create Table By Copying Selected Columns From Multiple Tables
In addition to all the above syntax, you can also create the new table from the multiple numbers of old tables. If you want to create a new table and all the columns not matching with the single old table. You can use multiple tables to copy the columns from each one.
Syntax
CREATE TABLE new_tablename AS(
SELECT column1, column2, column3…columnN
from old_tablename1, old_tablename2, old_tablename3…old_tablenameN;
);
1 |
CREATE TABLE new_tablename AS( SELECT column1,column2,column3…columnN from old_tablename1,old_tablename2,old_tablename3…old_tablenameN; ); |
Specify the column name and the table name from the old table you have already created and want to use for the new table.
The parameter of the Syntax given above
Sr.No. | Parameter Name | Description |
---|---|---|
1 | new_tablename | Specify the name of the new table that you want to create. |
2 | old_tablename | Specify the table name that you have already created and want to create the new table with the selected columns from this table. |
3 | old_tablename1, old_tablename2, old_tablename3…old_tablenameN | Enter the tables names from which you want the columns for the new table you want to create. You can specify N number of tables for the N number of columns. |
4 | column1, column2…columnN | Enter the column name you want to create for the respected table. You can create N number of column for the N number of tables. The columns should match with the respected table. |
Examples to Use SQL CREATE TABLE AS Statement
Create a table for the employee of a company.
CREATE TABLE Employee AS(
SELECT * from Company where salary>25000;
);
1 |
CREATE TABLE Employee AS( SELECT *from Company where salary>25000; ); |
The above example selects all the columns from the table Company. Because here I have also specified the condition, it will get all the record for that condition.
1 |
CREATE TABLE Employee AS( SELECT firstname,lastname,address,email from Company where salary>25000; ); |
The above example copy only the columns you specified and the record for which you have given the condition.
CREATE TABLE Employee AS(
SELECT address, designation, category_type
from Person, Company, Student
where id>700;
);
1 |
CREATE TABLE Employee AS( SELECT address,designation,category_type from Person,Company,Student where id>700; ); |
The example copies the columns from the three different tables for the three different column. It also copies the data from these table for the id greater than 700.
You must also learn.
- SQL CREATE DATABASE.
- SQL CREATE TABLE.
Reference
SQL Creating a Table As Doc.
Пример
Рассмотрим SQL пример CREATE TABLE.
PgSQL
CREATE TABLE suppliers
( supplier_id int NOT NULL,
supplier_name char(50) NOT NULL,
contact_name char(50)
);
1 2 3 4 5 |
CREATETABLEsuppliers supplier_namechar(50)NOT NULL, contact_namechar(50) |
Этот SQL пример CREATE TABLE создает таблицу suppliers, которая имеет 3 столбца.
- Первый столбец называется supplier_id, который создается в виде числового типа (максимум 10 цифр в длину) и не может содержать нулевые значения
- Второй столбец называется supplier_name, который представляет собой тип данных char (максимальная длина 50 символов) и также не может содержать нулевые значения
- Третий столбец называется contact_name, который является типом данных char, но может содержать нулевые значения
Теперь единственная проблема с этим SQL оператором CREATE TABLE заключается в том, что вы не определили первичный ключ для таблицы. Мы могли бы изменить этот SQL оператор CREATE TABLE и определить supplier_id в качестве первичного ключа следующим образом.
PgSQL
CREATE TABLE suppliers
( supplier_id int NOT NULL,
supplier_name char(50) NOT NULL,
contact_name char(50),
CONSTRAINT suppliers_pk PRIMARY KEY (supplier_id)
);
1 2 3 4 5 6 |
CREATETABLEsuppliers supplier_namechar(50)NOT NULL, contact_namechar(50), CONSTRAINTsuppliers_pkPRIMARYKEY(supplier_id) |
Подробнее о первичных ключах.Подробнее о внешних ключах..
Список заданий для базы данных «Компьютерный магазин»
Структура и создание базы данных .
1. Найти номер, скорость и размер жесткого диска для компьютера стоимостью менее 30000. Вывести с псевдонимами: Модель, Процессор, Винчестер
2. Укажите производителя и скорость тех компьютеров, которые имеют жесткий диск объемом не менее 500Гб
3. Выведите номера, типы и цены всех продуктов (любого типа), выпущенных производителем Россия.
Использовать: Innter Join, Union
4. Выведите производителя, выпускающего компьютеры, но не ноутбуки.
Использовать подзапрос
5. Выведите производителей компьютеров с процессором не менее 2000МГц. Вывести: Производитель.
Можно использовать подзапрос (IN)
6. Выведите ноутбуки, скорость которых меньше скорости любого из компьютеров. Вывести: Тип, Номер, Скорость
7. Выведите производителей самых дешевых цветных принтеров
Syntax
In its simplest form, the syntax for the CREATE TABLE statement in MySQL is:
CREATE TABLE table_name ( column1 datatype , column2 datatype , ... );
However, the full syntax for the MySQL CREATE TABLE statement is:
CREATE TABLE table_name ( column1 datatype , column2 datatype , ... | ] PRIMARY KEY (index_col_name, ...) | index_name (index_col_name, ...) | ] UNIQUE (index_col_name, ...) | {FULLTEXT | SPATIAL} index_name (index_col_name, ...) | ] FOREIGN KEY index_name (index_col_name, ...) REFERENCES another_table_name (index_col_name, ...) | CHECK (expression) {ENGINE | TYPE} = engine_name | AUTO_INCREMENT = value | AVG_ROW_LENGTH = value | CHARACTER SET = charset_name | CHECKSUM = {0 | 1} | COLLATE = collation_name | COMMENT = 'string' | DATA DIRECTORY = 'absolute path' | DELAY_KEY_WRITE = { 0 | 1 } | INDEX DIRECTORY = 'absolute path' | INSERT_METHOD = { NO | FIRST | LAST } | MAX_ROWS = value | MIN_ROWS = value | PACK_KEYS = {0 | 1 | DEFAULT} | PASSWORD = 'string' | RAID_TYPE = { 1 | STRIPED | RAIDO } RAID_CHUNKS = value RAID_CHUNKSIZE = value | ROW_FORMAT = {DEFAULT | DYNAMIC | FIXED | COMPRESSED} | UNION = (table1, ... ) );
Предусловия
Перед началом работы у вас должен быть установлен как сам MS SQL Server, так и SSMS. Версию сервера следует выбирать, исходя из технических характеристик своего компьютера и установленной операционной системы. В статье используется MS SQL Server 2017 Express.
Также таблицы (tables) не могут существовать без базы данных. Поэтому, прежде чем приступить к созданию таблиц, следует создать пустую БД. Это делается очень просто – достаточно запустить среду SSMS и выполнить несколько простых действий:
1) кликаем правой кнопкой мыши по контейнеру «Базы данных» и выбираем «Создать базу данных»;
2) в появившемся поле прописываем имя БД;
3) нажимаем «ОК».
1.2.1. Оператор CREATE TABLE
С теорией таблиц закончено, теперь попробуем эту таблицу рассмотреть с точки зрения базы данных. Имена колонок в списке баз данных называются именами полей. Нам необходимо только создать таблицу в базе данных с такими полями и все готово для хранения списка.
Общий вид команды CREATE TABLE показан в листинге 1.5.
Листинг 1.5. Общий вид команды CREATE TABLE
CREATE TABLE . | owner. ] table_name ( { < column_definition > | column_name AS computed_column_expression | < table_constraint > ::= } | ) < column_definition > ::= { column_name data_type } | ] ] ] < column_constraint > ::= { | ] ] | REFERENCES ref_table ] | CHECK ( logical_expression ) } < table_constraint > ::= { { ( column ) } ] | FOREIGN KEY ) ] REFERENCES ref_table ) ] | CHECK ( search_conditions ) }
Команда CREATE TABLE достаточно большая и сложная, потому что включает в себя не только создание самой таблицы, но и описание полей, ограничений, первичных и вторичных ключей. Поэтому, описание команды отнимет достаточно много времени, потому что без рассмотрения оператора CREATE TABLE по частям нам не обойтись, чем мы и будем заниматься ближайшие пару десятков страниц.
Прежде чем создавать какую-либо тестовую таблицу, давайте создадим базу данных, в которой будут проходить все следующие тестирования SQL запросов. Все предыдущие тестовые базы данных можно удалить и создать новую, чистую базу данных. Я для этого создал базу данных с именем TestDatabase с параметрами по умолчанию.
Теперь посмотрим, как создать таблицу и удалить ее. Подключитесь к своей тестовой базе данных (TestDatabase) и выполните следующий запрос:
CREATE TABLE TestTable ( id int )
Невозможно создавать пустую таблицу, без описания полей. Хотя бы одно поле должно быть создано. В данном примере создается таблица с именем TestTable. После имени в скобках указываются имена и типы полей в формате:
имя тип параметры
Обязательными являются только имя и тип, как в примере выше, а параметры могут отсутствовать. В этом случае, поле не будет обладать никакими дополнительными параметрами.
Если полей несколько, то все они перечисляются в скобках через запятую. В данном случае, описано только одно поле с именем id, тип int, и без параметров. Какие могут быть типы данных? Стандарт SQL описывает только основные типы: строка, число и т.д., но в MS SQL Server их намного больше. Все типы, которые поддерживает SQL Server 2000 можно увидеть в приложении 1.
Для удаления таблицы используется команда:
DROP TABLE имя
Где имя – это имя удаляемой таблицы. При этом вы должны быть подключены к серверу, таблицу которого вы удаляете, т.е. удаление происходит в текущей базе данных.
Следующий запрос показывает, как удалить таблицу TestTable, созданную нами ранее:
DROP TABLE TestTable
Если полей в таблице несколько, то их необходимо указывать в круглых скобках через запятую. Например:
CREATE TABLE TestTable ( id int, vcName varchar(30), vcLastName varchar(30), vcSurName varchar(30), cPol char(1), dBirthDay datetime )
В качестве дополнительных параметров можно указывать, например, явную кодировку (Collation) для поля. В следующем примере создается таблица с двумя текстовыми полями. В первом поле для хранения фамилии не указывается кодировка, поэтому для него будет взято значение из базы данных, а у второго поля явно указываем латинскую кодировку:
CREATE TABLE TestTable ( Famil varchar(10), Name varchar(10) collate latin1_general_cs_as )
При создании таблицы можно указать файловую группу, в которой должны храниться данные этой таблицы. Имя группы указывается после ключевого слова ON, за объявлением всех полей. В следующем примере создается таблица, данные которой будут помещены в группу с именем group1:
CREATE TABLE TestTable ( Famil varchar(10), Name varchar(10) collate latin1_general_cs_as ) ON group1
Если файловая группа не указана, то таблица создается в группе по умолчанию. Если вы создали пользовательскую группу, но она не является группой по умолчанию, то обязательно указывайте ее явно.
SQL References
SQL Keywords
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL Functions
String Functions
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Numeric Functions
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Date Functions
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Advanced Functions
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server Functions
String Functions
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Numeric Functions
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Date Functions
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Advanced Functions
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access Functions
String Functions
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Numeric Functions
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Date Functions
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Other Functions
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL Quick Ref