sql語句實現查詢
阿新 • • 發佈:2019-02-07
說明:此內容銜接上一次的內容,所有的語句是屬於sqlite,並且都經過除錯,結果都是正確的;
十八、資料的插入
建立一個actor_name表,將actor表中的所有first_name以及last_name匯入改表。 actor_name表結構如下:
實現語句:
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;
技術要點:
1. 用create table 語句建立actor_name 表 2. 用inset into actor select插入子查詢的結果集(不需要用values(),()這種形式。這種形式是手工插入單條資料或多條資料時用圓括號分割。插入結果集是不需要) 即,插入單條資料或是多條資料時,需要使用values語句進行資料的插入 例如:insert into table (ziduan1,ziduan2) values ('100','aa'), ('200','bb');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); 注意:唯一索引:unique index 普通索引:index 二十、SQL語句實現檢視的建立 針對actor表建立檢視actor_name_view,只包含first_name以及last_name兩列,並對這兩列重新命名,fist_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 fist_name_v, last_name as last_name_v
from actor; 或者是: create view actor_name_view(fist_name_v,last_name_v) as
select first_name,last_name
from actor; 二十一、使用強制索引實現查詢 針對salaries表emp_no欄位建立索引idx_emp_no,查詢emp_no為10005, 使用強制索引。 實現語句: select * from salaries indexed by idx_emp_no where emp_no=10005; 二十二、向已經存在的表中新增、刪除、修改欄位 實現語句: 1.增加一個欄位
alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; //增加一個欄位,預設為空
alter table user add COLUMN new2 VARCHAR(20) NOT NULL; //增加一個欄位,預設不能為空 www.2cto.com
2.刪除一個欄位
alter table user DROP COLUMN new2; //刪除一個欄位
3.修改一個欄位
alter table user MODIFY new1 VARCHAR(10); //修改一個欄位的型別
alter table user CHANGE new1 new4 int; //修改一個欄位的名稱,此時一定要重新指定該欄位的型別 二十三、SQL語句實現建立觸發器 構造一個觸發器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
); 實現語句: create trigger audit_log AFTER INSERT ON employees_test
FOR EACH ROW
BEGIN
insert into audit(EMP_no,NAME) values(new.ID,new.NAME);
END; 二十四、SQL語句實現記錄刪除 刪除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);
實現語句: delete from titles_test
where id not in(
select min(id)
from titles_test
group by emp_no
); 二十五、資料的更新 實現語句: update table set ziduan='' where ziduan2=''; 將id=5以及emp_no=10001的行資料替換成id=5以及emp_no=10005,其他資料保持不變,使用replace實現。 實現語句: UPDATE titles_test
SET emp_no = REPLACE(emp_no,10001,10005)
WHERE id = 5; 注意:replace(欄位名,被替換掉的,替換的)函式的用法; 二十六、資料庫更改表名 實現語句: alter table table1 rename to ss;(ss表示新的表名) 二十七、建立完整的表(包括索引、外來鍵、主鍵) 實現語句: create table table1( no INTNOTNULL AUTO_INCREMENT,
product_category INT NOT NULL,product_id INT NOT NULL,customer_id INT NOT NULL,PRIMARY KEY(no),INDEX (product_category, product_id),FOREIGN KEY(product_category, product_id) REFERENCES product(category, id)ON UPDATE CASCADE ON DELETE RESTRICT,
INDEX (customer_id), FOREIGN KEY (customer_id) REFERENCES customer(id)); 二十八、建立表的外來鍵約束 在audit表上建立外來鍵約束,其emp_no對應employees_test表的主鍵id。 實現語句: drop table audit; create table audit( EMP_no INT NOT NULL,
create_date datetime NOT NULL,
FOREIGN KEY(EMP_no) REFERENCES employees_test(ID)); 二十九、實現字串的連線 注意:在sqlite中是通過||實現字串的連線 實現語句: select last_name || "'" first_name from employees; 三十、查詢字串中的逗號的個數 解題技巧:巧用length函式以及replace函式; 實現語句: select length('10,A,B')-length(replace('10,A,B',',',"")) as cnt; 三十一、replace與substring結合使用(MySQL語句實現) 查詢資料型別為varchar型別的日期(2001-09-09)獲取其年份 實現語句: select SUBSTRING(REPLACE(book_date,'-',''),1,4)
from book_info; 輸出結果為:2001 知識點:MySQL語句中substr與substring函式的區別: 同樣,select SUBSTR(REPLACE(book_date,'-',''),4)
from book_info;(輸出結果為:10909) 同理,select SUBSTR(REPLACE(book_date,'-',''),-4)
from book_info;(輸出結果為:0909) 注意:在substr中正、負數,表示從左右開始數; 三十二、group_concat的用法 按照dept_no進行彙總,屬於同一個部門的emp_no按照逗號進行連線,結果給出dept_no以及連接出的結果employees 實現語句: select dept_no,group_concat(emp_no) as employess from emp_dept group by dept_no; 三十三、查詢平均工資 查詢排除當前最大、最小salary之後的員工的平均工資avg_salary。 語句實現: select avg(s.salary) as avg_salary
from salaries s
where s.salary <> (select max(salary) from salaries)
and s.salary <> (select min(salary) from salaries)
and s.to_date='9999-01-01'; 三十四、利用limit函式顯示分頁查詢 分頁查詢employees表,每5行一頁,返回第2頁的資料 實現語句: select *
from employees
limit 5,5; 解題技巧:此題巧妙利用limit函式實現分頁技術;