牛客網SQLプログラミング
1.最終入社者のすべての情報を検索
2、入社社員時間最下位の社員の全ての情報を検索する
SQLでのlimitの使い方
3、各部門の現在(to_date='9999-01-01')リーダーの現在の給与詳細と対応部門番号dept_を検索します.no
4、割り当てられたすべての部門の従業員を検索するlast_nameとfirst_nameおよびdept_no
5、すべての従業員のlast_を検索nameとfirst_nameおよび対応部門番号dept_No、一時的に具体的な部門を割り当てていない従業員も含む
INNER JOIN両サイドテーブルに対応するデータが同時に存在します.つまり、いずれか一方がデータを欠落しても表示されません.LEFTJOINは、右のテーブルに対応するデータがなくても、左のデータテーブルのすべてのデータを読み込みます.RIGHT JOINは、左のテーブルに対応するデータがなくても、右のデータテーブルのすべてのデータを読み込みます.
6、すべての従業員の入社時の給料状況を探して、emp_を与えます.Noおよびsalary、emp_No逆順給料の上昇幅が15回を超える従業員番号empを検索します.No及びそれに対応する上昇幅回数t
8,全従業員の現在の(to_date='9999-01-01')具体的な給与salaryの状況を特定し、同じ給与に対して1回のみ表示し、逆の順序で表示する
distinctは、すべてのクエリーのフィールドを比較して重さを除去し、すべてのフィールドが完全に同じでなければ重さを除去しません.クエリーフィールドの先頭に置く必要がありますクエリーgroupbyフィールドに基づいてリロードすると、フィールドは同じようにリロードされます
distinctとgroupbyの使用について:1、システムの性能が高く、データ量が大きい場合はgroupby 2、システムの性能が高くない場合はデータ量が少ない場合は両方とも3、できるだけgroupbyを使用する
9、すべての部門の現在のmanagerの現在の給料状況を取得し、dept_を与える.no, emp_Noおよびsalary、現在to_を表すdate=‘9999-01-01’ manager以外のすべての従業員emp_を取得no
11、すべての従業員の現在のmanagerを取得し、現在のmanagerが自分であれば結果は表示されず、現在はto_を表すdate=‘9999-01-01’. 結果の最初の列には、現在の従業員のemp_が表示されます.No,2列目はそのmanagerに対応するmanager_を与えるno.すべての部門で現在の従業員の給料が最も高い関連情報を取得し、dept_を提供します.no, emp_Noおよびそれに対応するsalary
13,
14,
15,
16現在の各titleタイプに対応する従業員の現在(to_date='9999-01-01')の給与に対応する平均給与を集計します.結果はtitleおよび平均賃金avgを与えた.
17,現在(to_date=‘9999-01-01’)の給料が2番目に多い従業員のemp_を取得するNoそれに対応する給料salary
18,現在の給与(to_date=‘9999-01-01’)ランキング2位の従業員番号emp_を検索No、給料salary、last_nameおよびfirst_name、order byは使用不可
19、すべての従業員のlast_を検索nameとfirst_nameおよび対応するdept_name、一時的に部署を割り当てていない従業員も含まれます
20、従業員番号emp_の検索No 10001入社以来の給与salary上昇幅値growth
21,
22,各部門の給与記録数を統計し、部門コードdept_を与えるNo、部門名dept_nameおよび回数sum
23.全従業員の現在の給与(to_date=‘9999-01-01’)はsalaryに従って1-Nの順位で、同じsalaryと並んでemp_No昇順配列
牛客解答討論1111111 manager以外のすべての従業員の現在の給与状況を取得し、dept_を与えます.no、emp_Noおよびsalary、現在to_を表すdate=‘9999-01-01’
.employeesテーブルのすべての従業員のlast_nameとfirst_nameはNameとしてつなぎ合わせられ、真ん中はスペースで区切られています
.次の情報を含むactorテーブルを作成します.
.
Insert intoテーブル名values(データ1),(データ2)注意:引用符
.テーブルactorに次のデータを一括挿入します.データがすでに存在する場合は、replace操作を使用しないで無視してください.
insert or ignore into
.古いテーブルから新しいテーブルにデータをインポート
.ユニークなインデックスと一般的なインデックスの作成
.ビューの作成
actorテーブルに対するビューactorの作成name_view、firstのみ含むnameおよびlast_name 2列、この2列の名前を変更します.first_nameはfirst_name_v,last_nameをlast_に変更name_v:
.
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 * from employees
where hire_date =
(select max(hire_date) from employees )
2、入社社員時間最下位の社員の全ての情報を検索する
select * from employees order by hire_date desc limit 2,1
SQLでのlimitの使い方
select * from tableName limit i,n
# i: ( 0 ), i=0 i
# n:
# i n ","
3、各部門の現在(to_date='9999-01-01')リーダーの現在の給与詳細と対応部門番号dept_を検索します.no
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
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`));
select salaries.*, dept_manager.dept_no from salaries
inner join dept_manager on dept_manager.emp_no = salaries.emp_no
where/and dept_manager.to_date='9999-01-01' and salaries.to_date='9999-01-01';
4、割り当てられたすべての部門の従業員を検索するlast_nameとfirst_nameおよびdept_no
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
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 employees.last_name, employees.first_name, dept_emp.dept_no
from employees inner join dept_emp on dept_emp.emp_no = employees.emp_no
5、すべての従業員のlast_を検索nameとfirst_nameおよび対応部門番号dept_No、一時的に具体的な部門を割り当てていない従業員も含む
select a.last_name,a.first_name,b.dept_no
from employees a
left join dept_emp b
on a.emp_no=b.emp_no
INNER JOIN両サイドテーブルに対応するデータが同時に存在します.つまり、いずれか一方がデータを欠落しても表示されません.LEFTJOINは、右のテーブルに対応するデータがなくても、左のデータテーブルのすべてのデータを読み込みます.RIGHT JOINは、左のテーブルに対応するデータがなくても、右のデータテーブルのすべてのデータを読み込みます.
6、すべての従業員の入社時の給料状況を探して、emp_を与えます.Noおよびsalary、emp_No逆順
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`));
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`));
: INNER JOIN
SELECT e.emp_no, s.salary FROM employees AS e INNER JOIN salaries AS s
ON e.emp_no = s.emp_no AND e.hire_date = s.from_date
ORDER BY e.emp_no DESC
:
SELECT e.emp_no, s.salary FROM employees AS e, salaries AS s
WHERE e.emp_no = s.emp_no AND e.hire_date = s.from_date
ORDER BY e.emp_no DESC
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`));
SELECT emp_no, COUNT(emp_no) AS t FROM salaries
GROUP BY emp_no HAVING t > 15
8,全従業員の現在の(to_date='9999-01-01')具体的な給与salaryの状況を特定し、同じ給与に対して1回のみ表示し、逆の順序で表示する
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`));
SELECT DISTINCT salary FROM salaries WHERE to_date='9999-01-01' ORDER BY salary DESC;
select salary from salaries where to_date='9999-01-01' group by salary ORDER BY salary DESC;
distinctは、すべてのクエリーのフィールドを比較して重さを除去し、すべてのフィールドが完全に同じでなければ重さを除去しません.クエリーフィールドの先頭に置く必要がありますクエリーgroupbyフィールドに基づいてリロードすると、フィールドは同じようにリロードされます
distinctとgroupbyの使用について:1、システムの性能が高く、データ量が大きい場合はgroupby 2、システムの性能が高くない場合はデータ量が少ない場合は両方とも3、できるだけgroupbyを使用する
9、すべての部門の現在のmanagerの現在の給料状況を取得し、dept_を与える.no, emp_Noおよびsalary、現在to_を表すdate=‘9999-01-01’
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
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`));
SELECT d.dept_no, d.emp_no, s.salary
FROM salaries AS s INNER JOIN dept_manager AS d
ON d.emp_no = s.emp_no
AND d.to_date = '9999-01-01'
AND s.to_date = '9999-01-01'
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
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`));
: NOT IN employees dept_manager emp_no
SELECT emp_no FROM employees
WHERE emp_no NOT IN (SELECT emp_no FROM dept_manager)
: LEFT JOIN , dept_no NULL emp_no
SELECT employees.emp_no FROM employees LEFT JOIN dept_manager
ON employees.emp_no = dept_manager.emp_no
WHERE dept_no IS NULL
:EXCEPT ; UNION ; INTERSECT
SELECT employees.emp_no FROM salaries
EXCEPT
SELECT dept_manager.emp_no FROM dept_manager;
11、すべての従業員の現在のmanagerを取得し、現在のmanagerが自分であれば結果は表示されず、現在はto_を表すdate=‘9999-01-01’. 結果の最初の列には、現在の従業員のemp_が表示されます.No,2列目はそのmanagerに対応するmanager_を与えるno.
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
SELECT de.emp_no, dm.emp_no AS manager_no
FROM dept_emp AS de INNER JOIN dept_manager AS dm
ON de.dept_no = dm.dept_no
WHERE dm.to_date = '9999-01-01' AND de.to_date = '9999-01-01' AND de.emp_no <> dm.emp_no
e.emp_no <> m.emp_no ===== e.emp_no!=m.emp_no
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
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`));
SELECT d.dept_no, s.emp_no, MAX(s.salary) AS salary
FROM salaries AS s INNER JOIN dept_emp As d
ON d.emp_no = s.emp_no
WHERE d.to_date = '9999-01-01' AND s.to_date = '9999-01-01'
GROUP BY d.dept_no
13,
titles title , 2, title t。
CREATE TABLE IF NOT EXISTS "titles" (
`emp_no` int(11) NOT NULL,
`title` varchar(50) NOT NULL,
`from_date` date NOT NULL,
`to_date` date DEFAULT NULL);
SELECT title, COUNT(*) AS t FROM titles
GROUP BY title HAVING t >= 2
14,
titles title , 2, title t。
emp_no 。
CREATE TABLE IF NOT EXISTS `titles` (
`emp_no` int(11) NOT NULL,
`title` varchar(50) NOT NULL,
`from_date` date NOT NULL,
`to_date` date DEFAULT NULL);
SELECT title, COUNT(DISTINCT emp_no) AS t FROM titles
GROUP BY title HAVING t >= 2
15,
employees emp_no , last_name Mary , hire_date
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 * from employees
where last_name != 'Mary'
and emp_no % 2 = 1
order by hire_date desc
16現在の各titleタイプに対応する従業員の現在(to_date='9999-01-01')の給与に対応する平均給与を集計します.結果はtitleおよび平均賃金avgを与えた.
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 TABLE IF NOT EXISTS "titles" (
`emp_no` int(11) NOT NULL,
`title` varchar(50) NOT NULL,
`from_date` date NOT NULL,
`to_date` date DEFAULT NULL);
select title,avg(salary) as avg
from titles a
inner join salaries b
on a.emp_no=b.emp_no and a.to_date = '9999-01-01' AND b.to_date = '9999-01-01'
group by a.title
17,現在(to_date=‘9999-01-01’)の給料が2番目に多い従業員のemp_を取得するNoそれに対応する給料salary
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`));
select emp_no, salary from salaries
where to_date='9999-01-01'
GROUP BY salary -------------- distinct salary, 。
order by salary desc limit 1,1
18,現在の給与(to_date=‘9999-01-01’)ランキング2位の従業員番号emp_を検索No、給料salary、last_nameおよびfirst_name、order byは使用不可
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`));
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`));
select s.emp_no , max(s.salary) , e.last_name, e.first_name
from salaries s, employees e
where s.emp_no = e.emp_no and s.to_date='9999-01-01'
and s.salary < (select max(salary) from salaries)
19、すべての従業員のlast_を検索nameとfirst_nameおよび対応するdept_name、一時的に部署を割り当てていない従業員も含まれます
CREATE TABLE `departments` (
`dept_no` char(4) NOT NULL,
`dept_name` varchar(40) NOT NULL,
PRIMARY KEY (`dept_no`));
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
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 e.last_name, e.first_name, d.dept_name
from employees e left join dept_emp de
on e.emp_no = de.emp_no
left join departments d
on de.dept_no = d.dept_no
20、従業員番号emp_の検索No 10001入社以来の給与salary上昇幅値growth
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`));
select max(salary)-min(salary) as growth from salaries where emp_no = '10001'
:
SELECT (
(SELECT salary FROM salaries WHERE emp_no = 10001 ORDER BY to_date DESC LIMIT 1) -
(SELECT salary FROM salaries WHERE emp_no = 10001 ORDER BY to_date ASC LIMIT 1)
) AS growth
21,
, emp_no growth, growth
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`));
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`));
select a.emp_no, (b.salary - c.salary) as growth
from
employees as a
inner join salaries as b
on a.emp_no = b.emp_no and b.to_date = '9999-01-01'
inner join salaries as c
on a.emp_no = c.emp_no and a.hire_date = c.from_date
order by growth asc
22,各部門の給与記録数を統計し、部門コードdept_を与えるNo、部門名dept_nameおよび回数sum
CREATE TABLE `departments` (
`dept_no` char(4) NOT NULL,
`dept_name` varchar(40) NOT NULL,
PRIMARY KEY (`dept_no`));
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
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`));
select d.dept_no ,dept.dept_name,count(salary)
from salaries s ,dept_emp d,departments dept
where s.emp_no = d.emp_no and d.dept_no=dept.dept_no
group by dept.dept_no
23.全従業員の現在の給与(to_date=‘9999-01-01’)はsalaryに従って1-Nの順位で、同じsalaryと並んでemp_No昇順配列
牛客解答討論1111111
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`));
SELECT s1.emp_no, s1.salary, COUNT(DISTINCT s2.salary) AS rank
FROM salaries AS s1, salaries AS s2
WHERE s1.to_date = '9999-01-01'
AND s2.to_date = '9999-01-01'
AND s1.salary <= s2.salary
GROUP BY s1.emp_no
ORDER BY s1.salary DESC, s1.emp_no ASC
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
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`));
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`));
select d.dept_no, s.emp_no, s.salary
from dept_emp d, salaries s
where s.emp_no NOT IN (SELECT emp_no FROM dept_manager dm where dm.to_date='9999-01-01' )
and d.emp_no = s.emp_no and s.to_date='9999-01-01'
.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`));
MySQL、SQL Server、Oracle CONCAT ,
SQLite "||"
CONCAT :
select CONCAT(CONCAT(last_name," "),first_name) as name from employees
select CONCAT(last_name," ",first_name) as name from employees
:
select last_name||" "||first_name as name from employees
.次の情報を含むactorテーブルを作成します.
NULL
actor_id smallint(5) not null id
first_name varchar(45) not null
last_name varchar(45) not null
last_update timestamp not null ,
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')) --,
-- PRIMARY KEY(actor_id)
)
.
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')))
actor_id first_name last_name last_update
1 PENELOPE GUINESS 2006-02-15 12:34:33
2 NICK WAHLBERG 2006-02-15 12:34:33
Insert intoテーブル名values(データ1),(データ2)注意:引用符
insert into actor
values (1, 'PENELOPE', 'GUINESS', '2006-02-15 12:34:33'),
(2, 'NICK', 'WAHLBERG', '2006-02-15 12:34:33')
.テーブルactorに次のデータを一括挿入します.データがすでに存在する場合は、replace操作を使用しないで無視してください.
insert or ignore into
insert or ignore into actor
values (3, 'ED', 'CHASE', '2006-02-15 12:34:33')
.古いテーブルから新しいテーブルにデータをインポート
actor, :
actor_id first_name last_name last_update
1 PENELOPE GUINESS 2006-02-15 12:34:33
2 NICK WAHLBERG 2006-02-15 12:34:33
actor_name , actor first_name last_name 。 actor_name :
NULL
first_name varchar(45) not null
last_name varchar(45) not null
sqlite3, :
create table actor_name as
select first_name,last_name from actor;
mysql, as , , :
create table actor_name
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 2列、この2列の名前を変更します.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 (first_name_v, last_name_v) as
select first_name,last_name 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);