牛客网数据库SQL实战(二)

SQL32 将employees表的所有员工的last_name和first_name拼接起来作为Name

SELECT CONCAT(last_name, ' ', first_name) AS name
FROM employees

SQL33 创建一个actor表,包含如下列信息

CREATE TABLE actor (
    `actor_id` SMALLINT(5) NOT NULL AUTO_INCREMENT,
    `first_name` VARCHAR(45) NOT NULL,
    `last_name` VARCHAR(45) NOT NULL,
    `last_update` DATE NOT NULL,
    PRIMARY KEY(`actor_id`)
)

SQL34 批量插入数据

INSERT INTO actor VALUES (1, 'PENELOPE', 'GUINESS', '2006-02-15 12:34:33'), (2, 'NICK', 'WAHLBERG', '2006-02-15 12:34:33')

SQL35 批量插入数据,不使用replace操作

INSERT IGNORE INTO actor VALUES (3, 'ED', 'CHASE', '2006-02-15 12:34:33')

SQL36 创建一个actor_name表

CREATE TABLE actor_name (
    `first_name` VARCHAR(45) NOT NULL COMMENT '名字',
    `last_name` VARCHAR(45) NOT NULL COMMENT '姓氏'
);

INSERT INTO actor_name
SELECT first_name, last_name
FROM actor;

SQL37 对first_name创建唯一索引uniq_idx_firstname

ALTER TABLE actor ADD UNIQUE INDEX uniq_idx_firstname(`first_name`);
ALTER TABLE actor ADD INDEX idx_lastname(`last_name`);

SQL38 针对actor表创建视图actor_name_view

CREATE VIEW actor_name_view AS
SELECT first_name AS first_name_v, last_name AS last_name_v
FROM actor

SQL39 针对上面的salaries表emp_no字段创建索引idx_emp_no

SELECT * FROM salaries FORCE INDEX(idx_emp_no) WHERE emp_no = '10005'

SQL40 在last_update后面新增加一列名字为create_date

ALTER TABLE actor ADD COLUMN (
    `create_date` DATETIME NOT NULL DEFAULT '2020-10-01 00:00:00'
)

SQL41 构造一个触发器audit_log

CREATE TRIGGER audit_log
AFTER INSERT ON employees_test
FOR EACH ROW
INSERT INTO audit(EMP_no, NAME) VALUES (NEW.id, NEW.name)

SQL42 删除emp_no重复的记录,只保留最小的id对应的记录。

DELETE FROM titles_test
WHERE id IN (
    SELECT *
    FROM (
        SELECT t1.id
        FROM titles_test AS t1
        WHERE t1.id > (
            SELECT MIN(id)
            FROM titles_test AS t2
            WHERE t2.emp_no = t1.emp_no
        )
    ) temp
)

SQL43 将所有to_date为9999-01-01的全部更新为NULL

UPDATE titles_test
SET from_date = '2001-01-01', to_date = NULL

SQL44 将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005

REPLACE INTO titles_test
SELECT id, '10005', title, from_date, to_date
FROM titles_test
WHERE id = '5'

SQL45 将titles_test表名修改为titles_2017

ALTER TABLE titles_test RENAME titles_2017

SQL46 在audit表上创建外键约束,其emp_no对应employees_test表的主键id

ALTER TABLE audit ADD FOREIGN KEY (`emp_no`) REFERENCES employees_test(`id`)

SQL48 将所有获取奖金的员工当前的薪水增加10%

UPDATE salaries SET salary = 1.1 * salary
WHERE to_date = '9999-01-01'

SQL50 将employees表中的所有员工的last_name和first_name通过引号连接起来。

SELECT CONCAT(last_name, '\'', first_name)
FROM employees

SQL51 查找字符串 10,A,B 中逗号,出现的次数cnt

SELECT CHAR_LENGTH('10,A,B') - CHAR_LENGTH(REPLACE('10,A,B', ',', ''))

SQL52 获取Employees中的first_name

SELECT first_name
FROM employees
ORDER BY SUBSTR(first_name, -2) ASC

SQL53 按照dept_no进行汇总

SELECT dept_no, GROUP_CONCAT(emp_no)
FROM dept_emp
GROUP BY dept_no
ORDER BY dept_no

SQL54 查找排除当前最大、最小salary之后的员工的平均工资avg_salary

SELECT AVG(salary) AS avg_salary
FROM salaries
WHERE to_date = '9999-01-01' AND salary <> (
    SELECT MAX(salary) FROM salaries WHERE to_date = '9999-01-01'
) AND salary <> (
    SELECT MIN(salary) FROM salaries WHERE to_date = '9999-01-01'
)

SQL55 分页查询employees表,每5行一页,返回第2页的数据

SELECT *
FROM employees
LIMIT 5 OFFSET 5

SQL57 使用含有关键字exists查找未分配具体部门的员工的所有信息。

SELECT * FROM employees e
WHERE NOT EXISTS (
    SELECT r.dept_no FROM dept_emp r
    WHERE r.emp_no = e.emp_no
)

SQL59 获取有奖金的员工相关信息。

SELECT
    e.emp_no,
    e.first_name,
    e.last_name,
    b.btype,
    s.salary,
    (CASE btype
     WHEN '1' THEN 0.1 * s.salary
     WHEN '2' THEN 0.2 * s.salary
     ELSE 0.3 * s.salary
     END) AS bouns
FROM
    employees e INNER JOIN emp_bonus b ON e.emp_no = b.emp_no
    INNER JOIN salaries s ON s.emp_no = e.emp_no
WHERE s.to_date = '9999-01-01'

SQL60 统计salary的累计和running_total

SELECT emp_no, salary, SUM(salary) OVER (ORDER BY emp_no) AS running_total
FROM salaries
WHERE to_date = '9999-01-01'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴听到你想要进行SQL Server数据库实战项目!以下是一个可能的项目示例: 项目名称:电子商务数据库管理 项目描述:在这个项目中,你将创建一个电子商务站的数据库,并进行相关的管理操作。 项目步骤: 1. 设计数据库结构:首先,你需要设计一个适合电子商务站的数据库结构。这包括用户信息、商品信息、订单信息、支付信息等。你需要确定表之间的关系和字段的类型。 2. 创建数据库:使用SQL Server Management Studio(SSMS)或其他适用的工具,在SQL Server中创建一个新的数据库。 3. 创建表格:根据你在第一步中设计的数据库结构,创建相应的表格。确保为每个表格定义正确的主键、外键和约束。 4. 插入数据:将模拟的用户信息、商品信息和订单信息等数据插入到相应的表格中。你可以使用INSERT语句或导入CSV文件等方法。 5. 查询操作:编写一些常见的查询语句,如查找特定用户的订单、查找销售额最高的商品等。确保查询语句正确返回预期结果。 6. 更新和删除操作:编写更新和删除数据的语句。例如,更新订单状态、删除不必要的用户信息等。 7. 数据备份和还原:学习如何备份和还原数据库以防止数据丢失。 8. 性能优化:评估数据库的性能,并尝试优化查询语句和索引以提高查询速度。 9. 安全性管理:学习如何设置用户权限和访问控制以保护数据库中的敏感信息。 10. 测试和调试:对你的数据库进行全面的测试和调试,确保它在各种情况下正常工作。 这只是一个示例项目,你可以根据实际需求进行调整和扩展。希望这个项目能够帮助你实践SQL Server数据库管理技能!如果你有任何问题,都可以随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值