牛客網SQLプログラミング


1.最終入社者のすべての情報を検索
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 DESCSELECT 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
  • 給料の上昇幅が15回を超える従業員番号empを検索します.No及びそれに対応する上昇幅回数t
  • 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'
    
  • manager以外のすべての従業員emp_を取得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`));
    
    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 NULLEXCEPTUNIONINTERSECT      
    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
    
  • すべての部門で現在の従業員の給料が最も高い関連情報を取得し、dept_を提供します.no, emp_Noおよびそれに対応するsalary
  • 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
    
  • manager以外のすべての従業員の現在の給与状況を取得し、dept_を与えます.no、emp_Noおよびsalary、現在to_を表すdate=‘9999-01-01’
  • 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);