• SQL实战(四)


    一、

    题目描述

    将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 actor
    values (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 actor
    select 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 actor
    values (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 as
    select 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 as
    
    select first_name as first_name_v,last_name as last_name_v
    
    from 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_test
    begin 
    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_test
    
    where id not in 
    
    (select min(id) from titles_test group by emp_no)
    
  • 相关阅读:
    java 对象导论
    Centos7 中打开和关闭防火墙及端口
    logstash用jdbc插件将数据库内容导入elasticsearch时间字段相差5小时
    git本地库中配置多个sshkey
    elasticsearch报Fielddata is disabled on text fields by default
    centos7环境下安装nginx
    请问一下大佬们,我的项目compile编译的时候总是编译报错
    Elasticsearch安装head插件
    mysql配置主从同步
    centos7中提升用户权限
  • 原文地址:https://www.cnblogs.com/ruo-li-suo-yi/p/8983995.html
Copyright © 2020-2023  润新知