Mysqlデータベースの高度なクエリーマルチテーブルクエリー、結合テーブルクエリー

11116 ワード

最近PHP+MYSQLのプロジェクトをやっていますが、正直、初めてですね
絶えず資料を調べて、いくつかの資料がコレクションする価値があると感じます
Mysqlデータベースの高度なクエリー
  emp  ,emp_name        
mysql> select * from emp where emp_name='  ';

        :
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100005 |    | 27 | 4000 | 1979-07-10 | male |
+--------+----------+---------+---------+------------+---------+
1 row in set (0.00 sec)

  emp  ,emp_sal,   5000       
mysql> select * from emp where emp_sal>5000;

        :
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100001 |    | 29 | 9000 | 1977-01-01 | male |
| 100002 |    | 27 | 8000 | 1979-12-31 | fmale |
+--------+----------+---------+---------+------------+---------+
2 rows in set (0.00 sec)

  emp   1978 1 1      
mysql> select * from emp where emp_bir>'1978-01-01';

        :
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100005 |    | 27 | 4000 | 1979-07-10 | male |
| 100002 |    | 27 | 8000 | 1979-12-31 | fmale |
+--------+----------+---------+---------+------------+---------+
2 rows in set (0.00 sec)

  emp   1979 12 1     ,   5000   
mysql> select * from emp where emp_bir<'1979-12-01' and emp_sal>5000;

        :
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100001 |    | 29 | 9000 | 1977-01-01 | male |
+--------+----------+---------+---------+------------+---------+
1 row in set (0.00 sec)

2.6.2     

CEO        
mysql> select emp_name,emp_sal from emp;

        :
+----------+---------+
| emp_name | emp_sal |
+----------+---------+
|    | 4000 |
|    | 9000 |
|    | 8000 |
+----------+---------+
3 rows in set (0.00 sec)

  1978         、     
mysql> select emp_name,emp_sal,emp_sex from emp where emp_bir>"1977-12-31";

        :
+----------+---------+---------+
| emp_name | emp_sal | emp_sex |
+----------+---------+---------+
|    | 4000 | male |
|    | 8000 | fmale |
+----------+---------+---------+
2 rows in set (0.00 sec)

2.6.3       

 ORDER BY   emp                (       ——  )
mysql> select * from emp order by emp_sal;

        :
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100005 |    | 27 | 4000 | 1979-07-10 | male |
| 100002 |    | 27 | 8000 | 1979-12-31 | fmale |
| 100001 |    | 29 | 9000 | 1977-01-01 | male |
+--------+----------+---------+---------+------------+---------+
3 rows in set (0.00 sec)

 DESC            ——  
mysql> select * from emp order by emp_sal desc;

        :
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100001 |    | 29 | 9000 | 1977-01-01 | male |
| 100002 |    | 27 | 8000 | 1979-12-31 | fmale |
| 100005 |    | 27 | 4000 | 1979-07-10 | male |
+--------+----------+---------+---------+------------+---------+
3 rows in set (0.00 sec)

2.6.4          

 LIMIT  emp                :
mysql> select * from emp order by emp_sal desc limit 2;

        :
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100001 |    | 29 | 9000 | 1977-01-01 | male |
| 100002 |    | 27 | 8000 | 1979-12-31 | fmale |
+--------+----------+---------+---------+------------+---------+
2 rows in set (0.00 sec)

       2  3     :
mysql> select * from emp order by emp_sal desc limit 1,2;

        :
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100002 |    | 27 | 8000 | 1979-12-31 | fmale |
| 100005 |    | 27 | 4000 | 1979-07-10 | male |
+--------+----------+---------+---------+------------+---------+
2 rows in set (0.01 sec)

  rand()    ,    2   ,     
mysql> select * from emp order by rand() limit 2;

     :(   )

+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100005 |    | 27 | 4000 | 1979-07-10 | male |
| 100001 |    | 29 | 9000 | 1977-01-01 | male |
+--------+----------+---------+---------+------------+---------+
2 rows in set (0.01 sec)

2.6.5               

mysql> select concat(emp_id," ",emp_name) from emp;

    :
+------------------------------+
| concat(emp_id," ",emp_name) |
+------------------------------+
| 100005    |
| 100001    |
| 100002    |
+------------------------------+
3 rows in set (0.00 sec)

 AS              
mysql> select concat(emp_id," ",emp_name) as info from emp;

        :
+----------------+
| info |
+----------------+
| 100005    |
| 100001    |
| 100002    |
+----------------+
3 rows in set (0.00 sec)

2.6.6          

    YEAR()、MONTH()、DAYOFMONTH()            

  7         :
mysql> select * from emp where month(emp_bir)=7;

        :
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100005 |    | 27 | 4000 | 1979-07-10 | male |
+--------+----------+---------+---------+------------+---------+
1 row in set (0.00 sec)

           :
mysql> select * from emp where monthname(emp_bir)="January";

        :
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100001 |    | 29 | 9000 | 1977-01-01 | male |
+--------+----------+---------+---------+------------+---------+
1 row in set (0.00 sec)

  TO_DAYS()                      ,     
mysql> select to_days(current_date) - to_days(emp_bir) as livingdays from emp;

       :
+------------+
| livingdays |
+------------+
| 9425 |
| 10345 |
| 9251 |
+------------+
3 rows in set (0.00 sec)

         100     
mysql> select date_add(now(),interval 100 day);

      :
+----------------------------------+
| date_add(now(),interval 100 day) |
+----------------------------------+
| 2005-08-07 13:56:58 |
+----------------------------------+
1 row in set (0.00 sec)

         100     
mysql> select date_sub(now(),interval 100 day);

      :
+----------------------------------+
| date_sub(now(),interval 100 day) |
+----------------------------------+
| 2005-01-19 14:00:20 |
+----------------------------------+
1 row in set (0.00 sec)

2.6.7     

  COUNT()           (  emp       )
mysql> select count(*) from emp;

      :
+----------+
| count(*) |
+----------+
| 3 |
+----------+
1 row in set (0.01 sec)

     5000   
mysql> select count(*) from emp where emp_sal>5000;

      :
+----------+
| count(*) |
+----------+
| 2 |
+----------+
1 row in set (0.00 sec)

        :(GROUP BY    )
mysql> select emp_sex,count(*) from emp group by emp_sex;

      :
+---------+----------+
| emp_sex | count(*) |
+---------+----------+
| fmale | 1 |
| male | 2 |
+---------+----------+
2 rows in set (0.01 sec)

        (MIN(),MAX(),SUM(),AVG())
mysql> select
-> min(emp_sal) as min_salary,
-> max(emp_sal) as max_salary,
-> sum(emp_sal) as sum_salary,
-> avg(emp_sal) as avg_salary,
-> count(*) as employee_num
-> from emp;

      :
+------------+------------+------------+------------+--------------+
| min_salary | max_salary | sum_salary | avg_salary | employee_num |
+------------+------------+------------+------------+--------------+
| 4000 | 9000 | 21000 | 7000.0000 | 3 |
+------------+------------+------------+------------+--------------+
1 row in set (0.00 sec)

2.6.8            

       ,        :
1).     asb       dept,       :
dept_id --> varchar(6)
dept_name --> varchar(10)
2).   emp          :
+--------+----------+---------+---------+------------+---------+
| emp_id | emp_name | emp_age | emp_sal | emp_bir | emp_sex |
+--------+----------+---------+---------+------------+---------+
| 100003 |    | 30 | 8000 | 1976-11-11 | fmale |
+--------+----------+---------+---------+------------+---------+
3).    dept ,      
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
| 100005 | MTD |
| 100001 | MTD |
| 100002 | MTD |
| 100003 | HR |
+---------+-----------+

  emp dept     ,          
mysql> select emp.emp_name,dept.dept_name from emp,dept
-> where emp.emp_id=dept.dept_id;

      :
+----------+-----------+
| emp_name | dept_name |
+----------+-----------+
|    | MTD |
|    | MTD |
|    | MTD |
|    | HR |
+----------+-----------+
4 rows in set (0.00 sec)

       :
1). FROM                
2).                ( emp   emp_id    emp.emp_id)
3).  Where            ( ,emp.emp_id dept.dept_id        )