博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL实战(四)
阅读量:4992 次
发布时间:2019-06-12

本文共 4419 字,大约阅读时间需要 14 分钟。

一、

题目描述

将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分
CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

select last_name||" "||first_name from employees as Name

  

二、

注意系统默认时间获取方法

 这是sql server 和SQLlite 语法区别

1、

create table actor(actor_id smallint(5) not null primary key,first_name varchar(45) not null,last_name varchar(45) not null,last_update timestamp not null default(datetime('now','localtime')))

 

三、

1、方法一:利用VALUES(value1, value2, ...), (value1, value2, ...), ...(value1, value2, ...),

insert into actorvalues (1,'PENELOPE','GUINESS','2006-02-15 12:34:33'),(2,'NICK','WAHLBERG','2006-02-15 12:34:33')

2、

方法二:利用 UNION SELECT 批量插入  

 

select ,,,union select ... 注意不用加括号

insert into actorselect 1,'PENELOPE','GUINESS','2006-02-15 12:34:33' union select 2,'NICK','WAHLBERG','2006-02-15 12:34:33'

 

四、

注意,只对主键起作用

id 和 name 都相等时,才判断存在;

 

1、

如果不存在则插入,如果存在则忽略
INSERT OR IGNORE INTO tablename VALUES(...);
insert or ignore into actorvalues (3,"ED",'CHASE','2006-02-15 12:34:33')

2、

如果不存在则插入,如果存在则替换
INSERT OR REPLACE INTO tablename VALUES(...);
 
五、

表里的数据和标的结构不一样。actor_name表有两列 first_name,last_name。也就是将actor表中的名字提取出来。

1、创建一个表,添加数据

create table if not exists actor_name(first_name varchar(45) not null ,last_name varchar(45) not null);insert into actor_name select first_name,last_name from actor

创建表时注意,表列名之间用逗号,创建完成后分号。  

2、简化写法

create table actor_name asselect first_name,last_name from actor;

 

六、

题目描述

针对如下表actor结构创建索引:
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')))
对first_name创建唯一索引uniq_idx_firstname,对last_name创建普通索引idx_lastname

 

create unique index uniq_idx_firstname on actor(first_name);create index idx_lastname on actor(last_name);

 

七、

题目描述

针对actor表创建视图actor_name_view,只包含first_name以及last_name两列,并对这两列重新命名,first_name为first_name_v,last_name修改为last_name_v:
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')))
 

create view actor_name_view asselect first_name as first_name_v,last_name as last_name_vfrom actor

  

七、

题目描述

针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005, 使用强制索引。
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
create index idx_emp_no on salaries(emp_no);

 

/*create index idx_emp_no on salaries(emp_no);*/select * from salaries indexed by idx_emp_no where emp_no='10005'

 

八、

题目描述

存在actor表,包含如下列信息:
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')));
现在在last_update后面新增加一列名字为create_date, 类型为datetime, NOT NULL,默认值为'0000 00:00:00'

alter table actor add column create_date datetime not null default '0000-00-00 00:00:00'

  

九、

题目描述

构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中。
CREATE TABLE employees_test(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
CREATE TABLE audit(
EMP_no INT NOT NULL,
NAME TEXT NOT NULL
);

1、

create trigger audit_log after insert on employees_testbegin insert into audit values(new.ID,new.NAME);end

 

十、

题目描述

删除emp_no重复的记录,只保留最小的id对应的记录。
CREATE TABLE IF NOT EXISTS titles_test (
id int(11) not null primary key,
emp_no int(11) NOT NULL,
title varchar(50) NOT NULL,
from_date date NOT NULL,
to_date date DEFAULT NULL);
insert into titles_test values ('1', '10001', 'Senior Engineer', '1986-06-26', '9999-01-01'),
('2', '10002', 'Staff', '1996-08-03', '9999-01-01'),
('3', '10003', 'Senior Engineer', '1995-12-03', '9999-01-01'),
('4', '10004', 'Senior Engineer', '1995-12-03', '9999-01-01'),
('5', '10001', 'Senior Engineer', '1986-06-26', '9999-01-01'),
('6', '10002', 'Staff', '1996-08-03', '9999-01-01'),
('7', '10003', 'Senior Engineer', '1995-12-03', '9999-01-01');

delete from titles_testwhere id not in (select min(id) from titles_test group by emp_no)

 

转载于:https://www.cnblogs.com/ruo-li-suo-yi/p/8983995.html

你可能感兴趣的文章
eclipse快捷键
查看>>
在指定文本里记录内容
查看>>
Android WebView常见问题及解决方案汇总
查看>>
[BZOJ4025]二分图
查看>>
HTML5 Canvas玩转酷炫大波浪进度图
查看>>
创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段
查看>>
电话录音系统说明书
查看>>
JVM(1)——IDEA启动分配内存大小及GC日志打印
查看>>
oracle 批量更新之update case when then
查看>>
text3
查看>>
自己写的连击文字特效
查看>>
【Android】eclipse打不开的解决办法和“Jar mismatch! Fix your dependencies”的解决
查看>>
Mysql查询某字段值重复的数据
查看>>
Java 自学笔记-基本语法3setOut()方法设置新的输出流
查看>>
cocos2d-JS 模块 anysdk 概述
查看>>
docker镜像mac下保存路径
查看>>
docker使用 命令
查看>>
关于C#操作INI文件的总结
查看>>
ZeptoLab Code Rush 2015 B. Om Nom and Dark Park
查看>>
ctci1.2
查看>>