# SQL Server sintaksisi

SQL ni UPPER-CASE da yozgan ma'qul.

{% hint style="info" %}
SQL katta-kichik harflarga sezgir emas. SELECT va select keywordlari bir ma'noni beradi
{% endhint %}

### Comments

**Single-line**: 2 ta tire qo'yilgan joydan o'ng tomoni qator oxirigacha comment

**Multi-line** — `/* */` orasida joylashgan barchasi comment

![Comment](https://user-images.githubusercontent.com/91861166/187704231-9d999b9c-bb9e-4024-8c83-ecfc0299da4e.png)

### SQL Sub Languages

SQL turli imkoniyatlarni ta'minlaydigan ko'plab pastki tillardan iborat. SQL ning pastki tillari tomonidan taqdim etiladigan imkoniyatlar - bu yaratish, ma'lumotlarni manipulyatsiya qilish, so'rovlar va ularni boshqarish

![Sub languages](https://user-images.githubusercontent.com/91861166/187704339-6a8f9ca4-31e3-475a-b95a-45bc1f4c8ed2.png)

* DDL - Data Definition Language
* DML - Data Manipulation Language
* DQL/DRL - Data Query/Retrieval Language
* TCL - Transaction Control Language
* DCL - Data Control Language

## Database bilan ishlash

{% hint style="info" %}
SQL Serverda db nomi Unique (yagona) bo'lishi, maksimum 128 belgi bo'lishi lozim.
{% endhint %}

DB xosil qilishni 2 xil yo'li mavjud. UI va Query. Faqat Queryni yozaman.

### CREATE DATABASE

```sql
CREATE DATABASE <Database_name>

CREATE DATABASE Student;
```

Yangi database(keyingi o'rinlarda db) bilan 2 file ham hosil bo'ladi.

`*.mdf` — master data file. Asosiy ma'lumotlar, jadvallar ushbu fileda saqlanadi.

`*.ldf` — log data file. Querylar tarixi(dbni tiklash uchun) ushbu fileda.

### ALTER DATABASE

```sql
ALTER DATABASE <Databse_name>              
MODIFY NAME = <New Name>

ALTER DATABASE Student
MODIFY NAME = Students;
```

ALTER orqali db nomini, sozlamalarini, file nomi va joylashuvini va boshqalarni o'zgartirishimiz mumkin.

File nomi:

```sql
Alter DATABASE Edu_TSQL_Alter;
MODIFY FILE ( NAME = Edu_TSQL, NEWNAME = Edu_TSQL_newName );
```

File joylashuv:

```sql
Alter DATABASE Edu_TSQL_Alter;
MODIFY FILE ( NAME = Edu_TSQL_NewName, FILENAME = N"C:\Program Files\Microsoft SQL Server\MSSQL14.SQL_MS\MSSQL\DATA\New_File\Edu_TSQL_log.ldf" );
```

### DROP DATABASE

```sql
DROP DATABASE <Databse_name>

DROP DATABASE Students;
```

Shu bilan db olib tashlanadi.

### BACKUP DATABASE

```sql
BACKUP DATABASE <Databse_name>
TO DISK = 'filePath';

BACKUP DATABASE Students
TO DISK = 'J:\Databases\';
```

SQL ma'lumotlar bazasining to'liq zaxira nusxasini yaratish uchun ishlatiladi

```sql
BACKUP DATABASE <Databse_name>
TO DISK = 'filePath'
WITH DIFFERENTIAL;
```

Differensial zahira nusxasi faqat oxirgi to'liq ma'lumotlar bazasi zahira nusxasidan keyin o'zgargan ma'lumotlar bazasi qismlarini zaxiralaydi.

### RESTORE DATABASE

```sql
RESTORE DATABASE <Databse_name>
FROM DISK = 'filePath + fileName';

RESTORE DATABASE Students
FROM DISK ='J:\Databases\Students.bak';
```

Zaxiraga olingan db ni yuklash

## Table bilan ishlash

{% hint style="info" %}
Jadval(Table) - bu ma'lumotlarni satr va ustun formatida saqlaydigan ob'ekt
{% endhint %}

Jadvalni quyidagi usullar bilan yaratishimiz mumkin:

1. Query: Barcha ustunlar va uning ma'lumotlar turini belgilash orqali yangi jadval yarating.
2. Query: Mavjud jadval yordamida yangi jadval yaratish
3. Jadval dizayneridan foydalanish

### CREATE TABLE

```sql
CREATE TABLE tableName
( 
  column_1 datatype [ NULL | NOT NULL ],
  column_2 datatype [ NULL | NOT NULL ],
  ...
);

CREATE TABLE Student
(
    Id INT NOT NULL,
    Name VARCHAR(30) NOT NULL,
    Address TEXT,
    Email TEXT
);
```

CREATE TABLE nomi (ustun\_nomi ma'lumot\_turi null\_yoki\_null\_emasligi);

NOT NULL yoki NULL ni belgilamasa default NULL olinadi.

Jadval nomi, column nomi Unique bo'lishi lozim. Nomi \_ dan boshqa belgi va raqamlardan boshlanmasligi lozim. Iloji boricha space(" ")dan foydalanmang. O'rniga \_ dan foydalaning. Nomi kamida 1 belgi, max 128 belgi, ustunlar soni 1 dan 1024 gacha bo'lishi lozim.

```sql
SELECT (Column 1, …) INTO <New Table name> FROM <Old Table name>;
SELECT (Id,Email) INTO Emails FROM Student;
```

Mavjud table dan yangi table ochish.

### ALTER TABLE

```sql
ALTER TABLE tableName ADD column_1 datatype, column_1 datatype;

ALTER TABLE Students ADD Age INT;
```

ALTER TABLE bilan column nomini, o'lchamini, datatype ini o'zgartirish, null yoki not null ni belgilash, yangi column qo'shish, olib tashlash, cheklovlar qo'shish, olib tashlash mumkin.

```sql
ALTER TABLE tableName ALTER COLUMN column_1 datatype NOT NULL or NULL;

ALTER TABLE Students ALTER COLUMN Address VARCHAR(100) NOT NULL;
```

Address column NULL dan NOT NULL ga o'zgardi.

```sql
ALTER TABLE tableName ALTER COLUMN column_1 datatype;

ALTER TABLE Students ALTER COLUMN Address VARCHAR(100);
```

Columnni size va typeni o'zgartirish. Sizeni o'zgartirganda mavjud datalarni eng kam belgi borini oladi. Masalan: "Tashkent, Amir Temur Street 108" da 31 dan kam qila olmaysiz.

```sql
EXEC sp_rename 'Table.Column', 'newName';

EXEC sp_rename 'Customers.ID', 'CustomerID';
```

Column nomini o'zgartirish. sp\_rename saqlangan protsedura hisoblanadi.

```sql
ALTER TABLE tableName DROP COLUMN column_1;

ALTER TABLE Students DROP COLUMN Address;
```

Ustunni olib tashlash

### DROP/TRUNCATE TABLE

```sql
DROP TABLE <tableName>;
DROP TABLE Students

TRUNCATE TABLE <tableName>;
TRUNCATE TABLE Students
```

DROP jadvalni o'chiradi. TRUNCATE esa jadvaldagi ma'lumotlarni tozalaydi.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.dot-net.uz/database/ms-sql-server/sql-server-sintaksisi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
