在本文中,我们将讨论 SQL 的概述,主要关注概念和查询,并将通过示例来理解每一个。让我们一一讨论。
概述 :
SQL 是一种计算机语言,用于以结构化格式存储、操作和检索数据。这种语言是 IBM 发明的。这里 SQL 代表结构化查询语言。将数据库与 SQL 查询交互,我们可以处理大量数据。有几种支持 SQL 的数据库服务器,如 MySQL、PostgreSQL、sqlite3 等。数据可以通过这些数据库服务器以安全和结构化的格式存储。 SQL 查询通常用于更好地进行数据操作和业务洞察。
SQL 数据库:
在这里,我们将讨论查询并借助示例进行理解。
查询 1 :
显示现有数据库 –
让我们考虑现有的数据库,如 nformation_schema、mysql、performance_schema、sakila、student、sys 和 world。如果你想显示现有的数据库,那么我们将使用如下所示的 show database 查询。
SHOW DATABASES;
输出 :
Existing database Name |
---|
information_schema |
mysql |
performance_schema |
sakila |
student |
sys |
world |
查询 2 :
删除数据库 –
假设我们要删除数据库即学生。
DROP DATABASE student;
SHOW DATABASES;
Database Name |
---|
information_schema |
mysql |
performance_schema |
sakila |
sys |
world |
查询 3 :
创建数据库——
假设我们要创建一个数据库,即银行。
CREATE DATABASE bank;
SHOW DATABASES;
Database Name |
---|
bank |
information_schema |
mysql |
performance_schema |
sakila |
sys |
world |
查询 4 :
使用数据库——
USE bank;
查询 5 :
创建一个表 –
这里的数据类型可以是 varchar、integer、date 等。
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
....
);
例子 –
CREATE TABLE IF NOT EXISTS Employee (
EmployeeID int,
FirstName varchar(55),
LastName varchar(55),
Email varchar(150),
DOB date
);
查询 6 :
显示同一数据库中的表 –
SHOW TABLES;
查询 7 :
放下桌子——
DROP TABLE table_name;
查询 8 :
将值插入现有表 –
INSERT INTO Employee
VALUES(1111,'Dipak','Bera','dipakbera@gmail.com','1994-11-22');
查询 9 :
获取表中的值 –
SELECT * FROM Employee;
查询 10 :
不为空 –
当我们在表中插入一个值(行)时,我们可以指定哪个列不接受空值。它将在创建表时完成。
CREATE TABLE table_name (
column1 datatype NOT NULL,
column2 datatype,
....
);
查询 11:
独特 –
我们还可以指定特定列中的条目应该是唯一的。
CREATE TABLE table_name (
column1 datatype UNIQUE,
column2 datatype,
....
);
例子 –
CREATE TABLE demo_table
(
EmployeeID int NOT NULL UNIQUE,
FirstName varchar(55),
LastName varchar(55)
);
SQL 中的关键概念:
在这里,我们将讨论一些重要的概念,如键、连接操作、具有子句、排序依据等,让我们一一讨论。
- 首要的关键 –
约束 PRIMARY KEY 建议条目既不能为空,也不能与指定的列对应。
CREATE TABLE IF NOT EXISTS Customer(
CustID int NOT NULL,
FName varchar(55),
LName varchar(55),
Email varchar(100),
DOB date,
CONSTRAINT customer_custid_pk PRIMARY KEY(CustID)
);
- 外键 –
FOREIGN KEY 用于在当前表和包含主键的前一个表之间建立连接。
CREATE TABLE Account(
AccNo int NOT NULL,
AType varchar(20),
OBal int,
OD date,
CurBal int,
CONSTRAINT customer_AccNo_fk FOREIGN KEY(AccNo) REFERENCES Customer(CustID)
);
- 此处,Account 表中的 AccNo 列由 Customer 表中的 CustID 列引用。这里 Account 表是子表,Customer 表是父表。
订购者:
这 ORDER BY 关键字用于按升序或降序显示结果。默认情况下,它是按升序排列的。
句法 –
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
- 场景一:
假设我们有如下的账户表。
AccNo | AType | OBal | OD | CurBal |
---|---|---|---|---|
1111 | savings | 1000 | 1990-11-09 | 6000 |
1114 | current | 2000 | 1992-10-07 | 1000 |
1113 | current | 7000 | 1992-11-03 | 4000 |
1112 | savings | 1000 | 2003-12-12 | 3000 |
- 现在,我们将使用 Order By 命令,如下所示。
SELECT * FROM Account ORDER BY CurBal;
输出 :
(默认情况下,它将按递增顺序排列)
AccNo | AType | OBal | OD | CurBal |
---|---|---|---|---|
1114 | current | 2000 | 1992-10-07 | 1000 |
1112 | savings | 1000 | 2003-12-12 | 3000 |
1113 | current | 7000 | 1992-11-03 | 4000 |
1111 | savings | 1000 | 1990-11-09 | 6000 |
- 场景 2:
对于降序:
SELECT * FROM Account ORDER BY CurBal DESC;
输出 :
AccNo | AType | OBal | OD | CurBal |
---|---|---|---|---|
1111 | savings | 1000 | 1990-11-09 | 6000 |
1113 | current | 7000 | 1992-11-03 | 4000 |
1112 | savings | 1000 | 2003-12-12 | 3000 |
1114 | current | 2000 | 1992-10-07 | 1000 |
通过…分组 :
此关键字用于对结果进行分组。
例子 –
SELECT COUNT(AType) FROM Account GROUP BY AType;
输出 :
AType | count(AType) |
---|---|
savings | 2 |
current | 2 |
加盟理念:
在这里,我们将讨论连接的概念如下。
- 左加入:
LEFT JOIN 关键字返回左表 (table1) 中的所有记录以及右表 (table2) 中的匹配记录。
句法 –
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
- 正确加入:
RIGHT JOIN 关键字返回右表 (table2) 中的所有记录以及左表 (table1) 中的匹配记录。 - 句法 –
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
- 内部联接 :
INNER JOIN 关键字从两个表中返回所有匹配的记录。 - 句法 –
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
- 完全加入:
FULL JOIN 或 FULL OUTER JOIN 关键字返回两个表中的所有记录。 - 句法 –
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name;
- 笔记 –
MySQL 的最新版本中未使用此关键字。相反,使用关键字 UNION。这里的语法如下。
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
- 自我加入:
这是同一个表的别名之间的常规连接。 - 句法 –
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;
哪里条款:
该子句用于过滤我们的数据。
句法 –
SELECT column1, column2, ...
FROM table_name
WHERE condition;
例子 –
SELECT AccNo,CurBal FROM Account WHERE CurBal>=1000;
输出 :
AccNo | CurBal |
---|---|
1111 | 6000 |
1113 | 4000 |
1114 | 1000 |
有条款:
这是必需的,因为 WHERE 子句不支持聚合函数,例如 count、min、max、avg、sum 等。
SELECT column1, column2, ...
FROM table_name
HAVING condition;
例子 –
SELECT AccNo,CurBal FROM Account HAVING CurBal=MAX(CurBal);
输出 :
AccNo | CurBal |
---|---|
1111 | 6000 |