使用TOP查询

使用TOP查询

查询表列前3列数据

select top 3 *from student

对学生按年龄排序返回前三列数据

select top 3 *from student  order by age 

返回结果集的前N条记录,以及排序字段值与第N条记录相等的记录, top n with ties 必须与order by一同使用

select top 3 with ties *from student  order by age 

删除年龄小于20的任意一位学生的信息

delete top(1) from student
where age<20

删除年龄小于21且年龄最小的以为学生

delete from student
where age in
(
select top 1 age
from student 
where age <21
order by age asc
)

更新年龄小于22岁的任意一位学生的信息

update top(1) student
set age = age+10
where age<22

更新年龄小于22岁年龄最小的一位学生的信息

update student
set age = age+10
from(select top 1 id from student
     where age <22 order by age asc)TB_TOP
where TB_TOP.ID = student.ID

向新创建的表中任意插入两条数据

select * into student02 from student where 1=2

insert top(2) into student02
output inserted.name,inserted.age,inserted.sex,inserted.address
select name,age,sex,address from student

向新创建的新表中插入年龄最小的两条数据

select * into student03 from student where 1=2

insert into student03
output inserted.name,inserted.age,inserted.sex,inserted.address
select top(2) name,age,sex,address from student order by age asc
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,您的问题是如何用 SQL Server 语句实现创建一个数据库,至少有5个表,每个表至少有10条数据,至少有两个表具有外键,使用模式匹配查询使用 top 查询,in 查询,降序查询使用 count 集合函数查询,分组统计查询使用连接条件的多表查询,比较运算符的子查询使用 in 的子查询,创建视图并使用,创建索引,创建唯一性约束,检查约束,默认值约束,外键约束,创建一个存储过程并使用,在某个表上创建一个插入和更新的 DML 触发器。 以下是实现该问题的 SQL Server 语句: 创建一个名为 myDatabase 的数据库: ``` CREATE DATABASE myDatabase; GO ``` 在 myDatabase 中创建 5 个表,每个表至少有 10 条数据,其中 book 和 author 表具有外键关系: ``` USE myDatabase; GO CREATE TABLE book ( book_id INT PRIMARY KEY, book_name VARCHAR(50), author_id INT FOREIGN KEY REFERENCES author(author_id), publish_date DATE, price FLOAT ); CREATE TABLE author ( author_id INT PRIMARY KEY, author_name VARCHAR(50), author_email VARCHAR(50) ); CREATE TABLE customer ( customer_id INT PRIMARY KEY, customer_name VARCHAR(50), customer_email VARCHAR(50), customer_phone VARCHAR(20) ); CREATE TABLE order ( order_id INT PRIMARY KEY, customer_id INT FOREIGN KEY REFERENCES customer(customer_id), book_id INT FOREIGN KEY REFERENCES book(book_id), order_date DATE ); CREATE TABLE supplier ( supplier_id INT PRIMARY KEY, supplier_name VARCHAR(50), supplier_email VARCHAR(50), supplier_phone VARCHAR(20) ); INSERT INTO book VALUES (1, 'Book A', 1, '2022-01-01', 50.0); INSERT INTO book VALUES (2, 'Book B', 2, '2022-02-01', 30.0); INSERT INTO book VALUES (3, 'Book C', 3, '2022-03-01', 20.0); INSERT INTO book VALUES (4, 'Book D', 4, '2022-04-01', 40.0); INSERT INTO book VALUES (5, 'Book E', 5, '2022-05-01', 60.0); INSERT INTO book VALUES (6, 'Book F', 1, '2022-06-01', 70.0); INSERT INTO book VALUES (7, 'Book G', 2, '2022-07-01', 80.0); INSERT INTO book VALUES (8, 'Book H', 3, '2022-08-01', 90.0); INSERT INTO book VALUES (9, 'Book I', 4, '2022-09-01', 100.0); INSERT INTO book VALUES (10, 'Book J', 5, '2022-10-01', 110.0); INSERT INTO author VALUES (1, 'Author A', 'a@example.com'); INSERT INTO author VALUES (2, 'Author B', 'b@example.com'); INSERT INTO author VALUES (3, 'Author C', 'c@example.com'); INSERT INTO author VALUES (4, 'Author D', 'd@example.com'); INSERT INTO author VALUES (5, 'Author E', 'e@example.com'); INSERT INTO customer VALUES (1, 'Customer A', 'a@example.com', '1234567890'); INSERT INTO customer VALUES (2, 'Customer B', 'b@example.com', '2345678901'); INSERT INTO customer VALUES (3, 'Customer C', 'c@example.com', '3456789012'); INSERT INTO customer VALUES (4, 'Customer D', 'd@example.com', '4567890123'); INSERT INTO customer VALUES (5, 'Customer E', 'e@example.com', '5678901234'); INSERT INTO customer VALUES (6, 'Customer F', 'f@example.com', '6789012345'); INSERT INTO customer VALUES (7, 'Customer G', 'g@example.com', '7890123456'); INSERT INTO customer VALUES (8, 'Customer H', 'h@example.com', '8901234567'); INSERT INTO customer VALUES (9, 'Customer I', 'i@example.com', '9012345678'); INSERT INTO customer VALUES (10, 'Customer J', 'j@example.com', '0123456789'); INSERT INTO [order] VALUES (1, 1, 1, '2022-01-01'); INSERT INTO [order] VALUES (2, 2, 2, '2022-02-01'); INSERT INTO [order] VALUES (3, 3, 3, '2022-03-01'); INSERT INTO [order] VALUES (4, 4, 4, '2022-04-01'); INSERT INTO [order] VALUES (5, 5, 5, '2022-05-01'); INSERT INTO [order] VALUES (6, 6, 6, '2022-06-01'); INSERT INTO [order] VALUES (7, 7, 7, '2022-07-01'); INSERT INTO [order] VALUES (8, 8, 8, '2022-08-01'); INSERT INTO [order] VALUES (9, 9, 9, '2022-09-01'); INSERT INTO [order] VALUES (10, 10, 10, '2022-10-01'); INSERT INTO supplier VALUES (1, 'Supplier A', 'a@example.com', '1234567890'); INSERT INTO supplier VALUES (2, 'Supplier B', 'b@example.com', '2345678901'); INSERT INTO supplier VALUES (3, 'Supplier C', 'c@example.com', '3456789012'); INSERT INTO supplier VALUES (4, 'Supplier D', 'd@example.com', '4567890123'); INSERT INTO supplier VALUES (5, 'Supplier E', 'e@example.com', '5678901234'); ``` 使用模式匹配查询 book 表中书名(book_name)以“Book A”开头的记录: ``` SELECT * FROM book WHERE book_name LIKE 'Book A%'; ``` 使用 top 查询 book 表中价格(price) 3 高的记录: ``` SELECT TOP 3 * FROM book ORDER BY price DESC; ``` 使用 in 查询 book 表中作者编号(author_id)为 1 或 2 的记录: ``` SELECT * FROM book WHERE author_id IN (1, 2); ``` 降序查询 book 表中价格(price): ``` SELECT * FROM book ORDER BY price DESC; ``` 使用 count 集合函数查询 book 表中记录总数: ``` SELECT COUNT(*) FROM book; ``` 分组统计查询 order 表中每个书籍(book_id)的销售总金额(price * 订单数量): ``` SELECT book_id, SUM(price * quantity) AS total_sales FROM ( SELECT order.book_id, book.price, COUNT(*) AS quantity FROM [order] JOIN book ON [order].book_id = book.book_id GROUP BY order.book_id, book.price ) AS order_detail GROUP BY book_id; ``` 使用连接条件的多表查询查询每个订单(order_id)的书籍信息(book_name)和顾客信息(customer_name): ``` SELECT [order].order_id, book.book_name, customer.customer_name FROM [order] JOIN book ON [order].book_id = book.book_id JOIN customer ON [order].customer_id = customer.customer_id; ``` 比较运算符的子查询查询 book 表中价格(price)高于平均价格的记录: ``` SELECT * FROM book WHERE price > (SELECT AVG(price) FROM book); ``` 使用 in 的子查询查询 book 表中作者编号(author_id)为 1 或 2 的记录: ``` SELECT * FROM book WHERE author_id IN (SELECT author_id FROM author WHERE author_name IN ('Author A', 'Author B')); ``` 创建视图(view)用于查询每个书籍(book_id)的销售总金额(price * 订单数量): ``` CREATE VIEW book_sales AS SELECT book_id, SUM(price * quantity) AS total_sales FROM ( SELECT order.book_id, book.price, COUNT(*) AS quantity FROM [order] JOIN book ON [order].book_id = book.book_id GROUP BY order.book_id, book.price ) AS order_detail GROUP BY book_id; ``` 查询视图 book_sales: ``` SELECT * FROM book_sales; ``` 创建索引(index)用于加速 book 表的 book_name 查询: ``` CREATE INDEX idx_book_name ON book (book_name); ``` 创建唯一性约束(unique constraint)用于保证 customer 表的 customer_email 唯一性: ``` ALTER TABLE customer ADD CONSTRAINT uc_customer_email UNIQUE (customer_email); ``` 创建检查约束(check constraint)用于限制 book 表的 price 取值范围在 0 和 100 之间: ``` ALTER TABLE book ADD CONSTRAINT ck_book_price CHECK (price >= 0 AND price <= 100); ``` 创建默认值约束(default constraint)用于指定 book 表的 publish_date 默认值为当日期: ``` ALTER TABLE book ADD CONSTRAINT df_book_publish_date DEFAULT GETDATE() FOR publish_date; ``` 创建外键约束(foreign key constraint)用于保证 order 表的 customer_id 和 book_id 在 customer 和 book 表中存在: ``` ALTER TABLE [order] ADD CONSTRAINT fk_order_customer FOREIGN KEY (customer_id) REFERENCES customer(customer_id); ALTER TABLE [order] ADD CONSTRAINT fk_order_book FOREIGN KEY (book_id) REFERENCES book(book_id); ``` 创建一个名为 myProcedure 的存储过程(stored procedure),用于查询 book 表中价格低于某个值的记录: ``` CREATE PROCEDURE myProcedure @price FLOAT AS BEGIN SELECT * FROM book WHERE price < @price; END; ``` 使用存储过程 myProcedure,查询 book 表中价格低于 50 的记录: ``` EXEC myProcedure 50; ``` 在 book 表中创建一个插入和更新的 DML 触发器(DML trigger),用于在插入或更新记录时自动更新 author 表中的作者数量(author_count): ``` CREATE TRIGGER tr_book_insert_update ON book AFTER INSERT, UPDATE AS BEGIN UPDATE author SET author_count = (SELECT COUNT(*) FROM book WHERE book.author_id = author.author_id) WHERE author.author_id IN (SELECT author_id FROM inserted UNION SELECT author_id FROM deleted); END; ``` 以上就是使用 SQL Server 语句实现创建一个数据库,至少有 5 个表,每个表至少有 10 条数据,至少有两个表具有外键,使用模式匹配查询使用 top 查询,in 查询,降序查询使用 count 集合函数查询,分组统计查询使用连接条件的多表查询,比较运算符的子查询使用 in 的子查询,创建视图并使用,创建索引,创建唯一性约束,检查约束,默认值约束,外键约束,创建一个存储过程并使用,在某个表上创建一个插入和更新的 DML 触发器的 SQL Server 语句实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走到无路可退

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值