数据库语言

数据库语言

一、数据库语言

1.创建表

1.1 创建最简单表

CREATE TABLE Students (  
    ID INT PRIMARY KEY,  #主键
    Name VARCHAR(100),  
    Age INT  
);

1.2 添加约束

非空约束(NOT NULL):确保某些字段在插入记录时必须提供值。
唯一约束(UNIQUE):确保某个字段或字段组合在表中的值是唯一的。
检查约束(CHECK,在某些数据库系统中可用):限制字段值必须满足的条件。

CREATE TABLE Student(
	ID INT PRIMARY KEY,
	Name VARCHAR(100) NOT NULL,
	Age INT CHECK(Age>=0),
	Email VARCHAR(100) UNIQUE
	);

1.3 使用外键

如果Students表需要与其他表(如Classes)相关联,可以使用外键来建立这种关系。

CREATE TABLE Classes (    
    ClassID INT PRIMARY KEY,    
    ClassName VARCHAR(100)    
);  
  
CREATE TABLE Students (    
    ID INT PRIMARY KEY,    
    Name VARCHAR(100) NOT NULL,    
    Age INT CHECK (Age >= 0),    
    ClassID INT,    
    FOREIGN KEY (ClassID) REFERENCES Classes(ClassID)    
);

1.4 使用索引

如果Students表需要与其他表(如Classes)相关联,可以使用外键来建立这种关系。

CREATE INDEX idx_student_name ON Students(Name);

1.5 其他使用:默认值、枚举值等

为字段设置默认值,以便在插入记录时如果未提供该字段的值,则使用默认值
如果某个字段的值是预定义的,可以使用枚举类型来限制可能的值。
某些数据库支持复杂数据类型,如JSON、XML或数组。这些可以用于存储更复杂的数据结构。

CREATE TABLE Students (    
    ID INT PRIMARY KEY,    
    Name VARCHAR(100) NOT NULL,   
    Age INT CHECK (Age >= 0) DEFAULT 0,  #假设年龄默认为0(虽然这在现实中可能不常见)  
    EnrollmentDate DATE DEFAULT CURRENT_DATE,    
    Gender ENUM('Male', 'Female', 'Other') , #枚举值
    ContactInfo JSON  # 假设使用支持JSON的数据库 
);

2.查询

SELECT [ALL|DISTINCT] 列名,...  
FROM 表名1 [ , 表名2]...  
[WHERE 条件]  
[GROUP BY 列名]  
[HAVING 条件]  
[ORDER BY 列名 [ASC|DESC],...]  
[LIMIT {[偏移量,]行数|行数 OFFSET 偏移量}]

2.1 查询所有学生的信息

SELECT * FROM Student;

2.2 查询特定学生的姓名和年龄

如果你只对某个学生的姓名和年龄感兴趣,可以这样做:,利用学生id进行查找

SELECT name, age FROM students WHERE id = 1;

2.3 查询年龄大于18岁的学生

SELECT * FROM students WHERE age > 18;

2.4 多表查询

假设除了students表之外,我们还有一个courses表(包含课程信息)和一个enrollments表(包含学生选课信息),其中enrollments表通过student_id和course_id字段分别与students表和courses表关联

#查询学生姓名和他们所选的课程名称
SELECT students.name, courses.name 
FROM students  
JOIN enrollments ON students.id = enrollments.student_id  
JOIN courses ON enrollments.course_id = courses.id;

2.5 查询没有选课的学生

SELECT students.*  
FROM students  
LEFT JOIN enrollments ON students.id = enrollments.student_id  
WHERE enrollments.student_id IS NULL;

2.6 分组查询

是一个包含GROUP BY、HAVING和ORDER BY的SQL查询例子。这个例子将基于一个假设的sales表,该表记录了销售数据,包括销售日期(sale_date)、销售人员ID(salesperson_id)、以及销售额(amount)。
找出每个销售人员的总销售额,但只包含总销售额超过1000的记录,并按总销售额从高到低排序。

SELECT salesperson_id, SUM(amount) AS total_sales  
FROM sales  
GROUP BY salesperson_id  
HAVING SUM(amount) > 1000  
ORDER BY total_sales DESC;

SELECT子句:选择了salesperson_id(销售人员ID)和SUM(amount)(销售额的总和,并别名为total_sales)。
FROM子句:指定了查询的数据来源是sales表。
GROUP BY子句:根据salesperson_id对结果集进行分组。这意味着每个销售人员的销售额将被单独计算总和。
HAVING子句:在分组后对数据进行过滤。这里,它过滤掉了那些总销售额不超过1000的销售人员。注意,HAVING子句是在数据分组之后应用的,因此它可以包含聚合函数(如SUM()、COUNT()等)。
ORDER BY子句:对最终结果集进行排序。这里,它根据total_sales(即销售额的总和)从高到低排序。DESC关键字表示降序排序,如果需要升序排序,可以省略DESC或使用ASC(但ASC是默认的排序方式)。

3.删除

3.1 删除表中的行(记录)

DELETE FROM 表名  
WHERE 条件;
#例子
DELETE FROM employees  
WHERE employee_id = 101;

3.2 删除整个表``

#如果你需要删除表中的所有数据并可能还想重置表的结构(尽管这通常不是DROP TABLE的直接目的),你可以使用DROP TABLE语句。但请注意,DROP TABLE会完全移除表及其所有数据,且该操作是不可逆的(除非你之前做了备份)
DROP TABLE 表名;
如果你只想删除表中的所有数据,但保留表的结构,可以使用TRUNCATE TABLE语句。与DELETE相比,TRUNCATE通常更快,因为它不记录每一行的删除操作。但是,它也不能用于带有外键约束引用的表(除非首先删除或禁用这些约束)。
TRUNCATE TABLE 表名;

3.3 限制删除条数

假设有一个名为orders的表,需要删除状态为canceled的前1000条订单:

DELETE FROM orders WHERE status = 'canceled' LIMIT 1000;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值