mysql基础使用

、数据类型

数据类型的作用:

    比较方式:排序方式

    存储空间:取值范围

    参与的运算:

1、字符型:

    char(N):固定长度,N指字符数,不区分大小写,最多支持255个字符

 varchar(N):可变长度,需要结束符,结束符最少占据一个空间。N指最大字符数,不区分大小写,最多支持65535个字符

 binary(N):区分大小写

varbinary(N):区分大小写

   text(N):tinytext,text,mediumtext,longtext   大段文本,不区分大小写

    blob(N):tinyblob,blob,mediumblob,longblob 大段文本,区分大小写    

2、数值型:

 1)精确数值型:

                      int(整形):tinyint(微,1B),smallint(小,2B),mediumint(中,3B),int(4B),bigint(大,4B)

         decimal(十进制):

 2)近似数值型:

                        浮点型:

                                float:单精度

                                double:双精度

3、日期时间型:

        date,3B

        time,3B

        datetime,8B

        timestamp:时间戳

        year(2),year(4)

4、布尔型:1|0

5、 NULL:

6、内置类型:

          ENUM:枚举型(一定范围内挑一个,字符型)    也属于字符型

          SET:集合型(集合内字符任意组合,不能使用集合外的字符)    也属于字符型

二、mysql使用

1、客户端命令命令在客户端执行,不需要命令终止符,通常默认为分号“;”

\q|quit|exit

\?|?|h|help

\g:把命令发送给服务器端执行,相当于“;”

\G:把行分段显示

\c:取消命令执行

mysql> SELECT user,host,password from mysql.user\g
+------+------------+-------------------------------------------+
| user | host       | password                                  |
+------+------------+-------------------------------------------+
| root | localhost  | *CC67043C7BCFF5EEA5566BD9B1F3C74FD9A5CF5D |
| root | BAIYU\_179 |                                           |
| root | 127.0.0.1  | *CC67043C7BCFF5EEA5566BD9B1F3C74FD9A5CF5D |
|      | BAIYU\_179 |                                           |
+------+------------+-------------------------------------------+
4 rows in set (0.00 sec)

mysql> SELECT user,host,password from mysql.user\G
*************************** 1. row ***************************
    user: root
    host: localhost
password: *CC67043C7BCFF5EEA5566BD9B1F3C74FD9A5CF5D
*************************** 2. row ***************************
    user: root
    host: BAIYU\_179
password: 
*************************** 3. row ***************************
    user: root
    host: 127.0.0.1
password: *CC67043C7BCFF5EEA5566BD9B1F3C74FD9A5CF5D
*************************** 4. row ***************************
    user: 
    host: BAIYU\_179
password: 
4 rows in set (0.00 sec)

2、服务器端命令命令发送到服务器端执行

BIF:内建函数

SELECT BIF();

选取(选部分行)和投影(选部分列)

select col1,col2,...from tb1,tb2,...where clause;

where col1 > 30;

SHOW DATABASES; 显示有权限查看的所有库

USE database_name:使用某库

SHOW TABLES; 显示其库所有表

CREATE DATABASE database_name;创建库

DROP DATABASE database_name;删除某库

mysql> SELECT CURRENT_TIME();
+----------------+
| CURRENT_TIME() |
+----------------+
| 00:10:18       |
+----------------+
1 row in set (0.00 sec)

命令帮助的获取:mysql> help KEYWORD

命令不区分字符大小写(建议大写),但与文件系统相关的部分是否区分大小写根据OS    

3、mysql使用:

         交互模式:

非交互|批处理模式:

[root@BAIYU_179 ~]# mysql -uroot -p123456789 -e 'SELECT USER();'
+----------------+
| USER()         |
+----------------+
| root@localhost |
+----------------+
[root@BAIYU_179 ~]# echo -e "SHOW DATABASES;\nCREATE DATABASE testdb;\nSHOW DAT
ABASES;" > a.sql
[root@BAIYU_179 ~]# mysql -uroot -p123456789 < a.sql                           
Database
information_schema
mysql
performance_schema
test
Database
information_schema
mysql
performance_schema
test
testdb

4、键:key

约束:constraint 

   主键约束:对一张表来讲,主键只能有一个,主键数据不能相同,主键不能为空(NULL)

 唯一键约束:可以为NULL,可以有多个

   外键约束:

   检查式约束:用户自定义有效取值范围

:就是选取出来的字段

主键:能唯一标识表中每一个记录的字段或字段的组合

候选键:能作为主键的字段,

5、表:table

由行和列组成的二维关系

字段:字段名,约束,字段类型

创建表:

     CREATE TABLE table_name(col1_name col1_type 修饰符,col2 col2_type 修饰符...);

删除表:

      DROP TABLE table_name;

字段或字段类型还可以有修饰符:

NOT NULL:不能为空

NULL:可为空

UNSIGNED:无符号,无负值

DEFAULT 'STRING': 默认值 

AUTO_INCREMENT:自动增长类型的字段必须为主键或唯一键

PRIMARY KEY:主键,如何把多个字段定义为主键则用括号把多个字段括起来在后面加PRIMARY KEY

字符要加上引号,数值不能加引号     

show character set 字符集 

show collation 字符集的排序方式

character set ' ':使用的字符集

collation:使用的排序规则                 

mysql> CREATE TABLE students(name varchar(30),age tinyint,gender ENUM('f','m'))
;
Query OK, 0 rows affected (0.02 sec)

mysql> DESCRIBE students;
+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| name   | varchar(30)   | YES  |     | NULL    |       |
| age    | tinyint(4)    | YES  |     | NULL    |       |
| gender | enum('f','m') | YES  |     | NULL    |       |
+--------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> DROP TABLE students;
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW TABLES;
Empty set (0.00 sec)

mysql> CREATE TABLE students(name varchar(30) NOT NULL,age tinyint UNSIGNED NOT
 NULL,gender ENUM('F','M') DEFAULT 'M');
Query OK, 0 rows affected (0.00 sec)

mysql> DESC students;
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| name   | varchar(30)         | NO   |     | NULL    |       |
| age    | tinyint(3) unsigned | NO   |     | NULL    |       |
| gender | enum('F','M')       | YES  |     | M       |       |
+--------+---------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> CREATE TABLE students(stuID int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY
 KEY, name varchar(30) NOT NULL,age tinyint UNSIGNED NOT NULL,gender ENUM('F','
M') NOT NULL DEFAULT 'M');
Query OK, 0 rows affected (0.01 sec)

mysql> DESC students;
+--------+---------------------+------+-----+---------+----------------+
| Field  | Type                | Null | Key | Default | Extra          |
+--------+---------------------+------+-----+---------+----------------+
| stuID  | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| name   | varchar(30)         | NO   |     | NULL    |                |
| age    | tinyint(3) unsigned | NO   |     | NULL    |                |
| gender | enum('F','M')       | NO   |     | M       |                |
+--------+---------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

6、数据

插入:

INSERT INTO table_name (col1,col2,...) value|values(val1,val2,...)

INSERT INTO table_name VALUES(val1,val2,...)

mysql> INSERT INTO students values(1,'xj',25,'M');
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM students;
+-------+------+-----+--------+
| stuID | name | age | gender |
+-------+------+-----+--------+
|     1 | xj   |  25 | M      |
+-------+------+-----+--------+
1 row in set (0.00 sec)

mysql> INSERT INTO students values(2,'xxj',23,'M'),(3,'xiexiaojun',24,'M');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM students;                 
+-------+------------+-----+--------+
| stuID | name       | age | gender |
+-------+------------+-----+--------+
|     1 | xj         |  25 | M      |
|     2 | xxj        |  23 | M      |
|     3 | xiexiaojun |  24 | M      |
+-------+------------+-----+--------+
3 rows in set (0.00 sec)

mysql> INSERT INTO students(name,gender) value('xx','M'),('xiexie','F');       
Query OK, 2 rows affected, 1 warning (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 1

mysql> SELECT * FROM students;
+-------+------------+-----+--------+
| stuID | name       | age | gender |
+-------+------------+-----+--------+
|     1 | xj         |  25 | M      |
|     2 | xxj        |  23 | M      |
|     3 | xiexiaojun |  24 | M      |
|     4 | xx         |   0 | M      |
|     5 | xiexie     |   0 | F      |
+-------+------------+-----+--------+
5 rows in set (0.00 sec)

查询:

    SELECT col1,col2,... FROM table_name WHERE 条件表达式;

    SELECT * FROM table_name;

条件表达式:

  =,>,<,>=,<

like(通配符):

           %:任意长度的任意字符

           _:匹配任意单个字符

rlink:正则表达式

组合条件:

        and

        or

        not

mysql> SELECT name,age,gender FROM students WHERE age>20;
+------------+-----+--------+
| name       | age | gender |
+------------+-----+--------+
| xj         |  25 | M      |
| xxj        |  23 | M      |
| xiexiaojun |  24 | M      |
+------------+-----+--------+
3 rows in set (0.00 sec)

mysql> SELECT name,age,gender FROM students WHERE gender=F; 
ERROR 1054 (42S22): Unknown column 'F' in 'where clause'
mysql> SELECT name,age,gender FROM students WHERE gender='F';
+--------+-----+--------+
| name   | age | gender |
+--------+-----+--------+
| xiexie |   0 | F      |
+--------+-----+--------+
1 row in set (0.00 sec)

mysql> SELECT name,age,gender FROM students WHERE age<25 AND gender='F'; 
+--------+-----+--------+
| name   | age | gender |
+--------+-----+--------+
| xiexie |   0 | F      |
+--------+-----+--------+
1 row in set (0.00 sec)

删除:

     DELETE FROM table_name;

     DELETE FORM table_name WHERE 条件表达式;  

mysql> DELETE FROM students WHERE age<20;
Query OK, 2 rows affected (0.00 sec)

mysql> SELECT * FROM students;           
+-------+------------+-----+--------+
| stuID | name       | age | gender |
+-------+------------+-----+--------+
|     1 | xj         |  25 | M      |
|     2 | xxj        |  23 | M      |
|     3 | xiexiaojun |  24 | M      |
+-------+------------+-----+--------+
3 rows in set (0.00 sec)

mysql> DELETE FROM students WHERE NAME LIKE '%o%';      
Query OK, 1 row affected (0.02 sec)

mysql> SELECT * FROM students;                    
+-------+------+-----+--------+
| stuID | name | age | gender |
+-------+------+-----+--------+
|     1 | xj   |  25 | M      |
|     2 | xxj  |  23 | M      |
+-------+------+-----+--------+
2 rows in set (0.00 sec)

更新:

    UPDATE table_name SET col1=values,col2=values,...;

    UPDATE table_name SET col1=values,... WHERE 条件表达式;

mysql> UPDATE students SET age=30;
Query OK, 2 rows affected (0.02 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> SELECT * FROM students;    
+-------+------+-----+--------+
| stuID | name | age | gender |
+-------+------+-----+--------+
|     1 | xj   |  30 | M      |
|     2 | xxj  |  30 | M      |
+-------+------+-----+--------+
2 rows in set (0.00 sec)

mysql> UPDATE students SET age=33 WHERE STUID=1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM students;                  
+-------+------+-----+--------+
| stuID | name | age | gender |
+-------+------+-----+--------+
|     1 | xj   |  33 | M      |
|     2 | xxj  |  30 | M      |
+-------+------+-----+--------+
2 rows in set (0.00 sec)

7、查看类命令:

show crearte table tb_name;查询创建表时使用的命令

show engines;查询数据库支持的存储类型

show table status\G;查询当前数据库的存储类型

show table status like 's%'\G;查询某个表的存储类型

字符集:如何实现从字节编码(二进制)到为汉字的映射

GBK,GB2312,GB18030,UTF-8,big5

每种字符集可能存在多种不同的排序规则:

show character set 字符集 

show collation 字符集的排序方式

character set ' ':使用的字符集

collation:使用的排序规则

默认会从数据库或表中就继承


8、Mysql服务器的工作特性的定义是通过服务器变量实现的:

show variables 查看服务器变量(默认查看的是session的变量

show global variables 查看全局变量

show session variables 查看会话的变量

show variables like 'data%';

MySQL服务器运行中的状态是通过状态变量输出的:

show status:服务器运行状态 

show global status 查看全局变量

show session status 查看会话的变量

三、SQL

ANSI SQL:SQL-86,SQL-89,SQL-92,SQL-99,SQL-03

DDL:数据定义语言(结构)

  CREATE #在数据库中创建对象

DB组件:数据库、表、索引、视图、用户、存储过程、存储函数、触发器、事件调度器等

CREATE相关的常用命令:

CREATE DATABASE

CREATE EVENT

CREATE FUNCTION

CREATE FUNCTION UDF

CREATE INDEX

CREATE PROCEDURE

CREATE SERVER

CREATE TABLE

CREATE TABLESPACE

CREATE TRIGGER

CREATE USER

CREATE VIEW

  ALTER #修改数据结构

  DROP #删除对象

  RENAME #重命名对象

DML:数据操作的语言 (内容)

  INSERT #向一个表格中插入数据

  UPDATE #更新一个表格中的已有数据

  DELETE #删除表格中的数据

DCL:数据控制语言(权限)

  GRANT #赋予一个用户对数据库或数据表格等制定权限

  REVOKE #删除一个用户对数据库或数据表格等制定权限


DDL:

创建数据库:

CREATE DATABASE db_name;

CREATE DATABASE IF NOT EXISTS db_name;

删除数据库:DROP DATABASE db_name;

创建表:

    CREATE TABLE tb_name(列1 数据类型 修饰符,列2 数据类型 修饰符,..列n 数据类型 修饰符);

查看库中的表;SHOW TABLES FROM db_name;

查看表的结构:DESC tables_name;

删除表:DROP TABLE tables_name;


修改表:ALTER TABLE tb_name MODIFY #改变字段属性

                 CHANGE #改变字段名称

                  ADD

                  DROP

 例:ALTER TABLE students ADD course VARCHAR(20) NOT NULL;

    ALTER TABLE students CHANGE course Course VARCHAR(10) AFTER Name;

DML:

INSERT INTO tb_name (col1,col2,...) VALUES|VALUE('STRING',NUM,...);

例:INSERT INTO students (Name,Age) VALUE ('LingHuChong',25),('Xiaolongnv',18);

例:INSERT INTO students VALUES ('Xiaoxiangzi', 'Hamagong', '55');

UPDATE tb_name SET column=value WHERE CONDITION;

例:UPDATE students SET Course='pixiejianfa';

   UPDATE students SET Course='kuifabaodian' WHERE Name='Xiaoxiangzi';

#WHERE指定条件

选择指定以某字段做为搜索码,与某值做逻辑比较,筛选符合条件的行。

投影:筛选符合条件的列

例: SELECT Name,Age From students WHERE Course='pixiejianf';

DELETE FROM tb_name WHERE CONDITION;#删除的是行

例:DELETE FROM students WHERE Course='kuifabaodi';

SELECT col1,col2 FROM tb_name WHERE CONDITION;

*:所有字段

WHERE:没有条件表示所有行

DCL:

CREATE USER 'USERNAME'@'HOST' IDENTIFIED BY 'PASSWORD'; 创建用户

DROP USER 'USERNAME'@'HOST'; 删除用户


HOST:

   IP

   HOSTNAME

   NETWORK

   通配符  _:匹配任意单个字符,172.16.0 _

         %:匹配任意字符

例:jerry@'%'


GRANT pri1,pri2,... ON db_name.tb_name TO 'username'@'host' [IDENTIFIED BY 'PASSWORD'];

REVOKE  pri1,pri2,... ON db_name.tb_name TO 'username'@'host';

SHOW GRANTS FOR 'username'@'host';查看用户权限

GRANT ALL PRIVILEGES ON test.* TO  'xiejun'@'%'; 赋予用户xiejun从任何主机登录并对数据库test下所有表具有全部权限


四、补充

1、sql_mode

SQL_MODE:定义Mysqld对约束等的响应行为

         修改方式:

             mysql> SET GLOBA sql_mode='MODE';

             mysql> SET @@global.sq._mode='MODE';

          需要修改权限,仅对修改后新创建的会话有效:对已建立的会话无效

             mysql> SET [SEESION] sql_mode='MODE';

             mysql> SET @@session.sql_mode='MODE';

常用MODE:TRADITIONAL, STRICT_TRANS_TABLES, or STRICT_ALL_TABLES

2、

表:二维关系

设计表:遵循规范;


定义:字段,索引

字段:字段名,字段数据类型,修改符

约束,索引:应该创建在经常用作查询条件的字段上;

索引:实现级别在存储引擎;

分类:

稠密索引、稀疏索引

B+索引、hash索引、R树索引、FULLTEXT索引

聚集索引、非聚集索引

简单索引、组合索引

3、创建表:CREATE TABLE

(1) 直接创建;

 (2) 通过查询现存的表创建;新表会被直接插入查询而来的数据;

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name  [(create_definition,...)]                 [table_options]   [partition_options]   select_statement

 (3) 通过复制现存的表的表结构创建;不复制数据;

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

   { LIKE old_tbl_name | (LIKE old_tbl_name) }


注意:Storage Engine是指表类型,也即在表创建时指明其使用的存储引擎;同一个库中表要使用同一种存储引擎类型;


查看表结构:

   DESCRIBE tbl_name;

查看表状态信息:

SHOW [FULL] TABLES [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]   修改表:ALTER TABLE

删除表:DROP TABLE


4、MySQL基础

单进程多线程:

用户连接:连接线程

MySQL数据文件类型:

数据文件、索引文件

重做日志、撤消日志、二进制日志、错误日志、查询日志、慢查询日志、(中继日志)


DDL & DML:

索引管理:

按特定数据结构存储的数据;

索引类型:

聚集索引、非聚集索引:数据是否与索引存储在一起;

主键索引、辅助索引

稠密索引、稀疏索引:是否索引了每一个数据项;

B+ TREE、HASH、R TREE

简单索引、组合索引

左前缀索引

覆盖索引


管理索引的途径:

创建索引:创建表时指定;

CREATE INDEX 索引名 ON tablename;

ALTER TABLE tablename ADD INDEX(索引名);

创建或删除索引:修改表的命令

        删除索引:DROP INDEX

查看表上的索引:

SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name] [WHERE expr]


EXPLAIN:能够分析查询语句执行过程中是否用到索引,以及是如何获取到数据的


视图:VIEW:虚表

创建方法:

CREATE

VIEW view_name [(column_list)]

AS select_statement

[WITH [CASCADED | LOCAL] CHECK OPTION]

删除视图:

        DROP VIEW [IF EXISTS]

view_name [, view_name] ...

[RESTRICT | CASCADE]


视图中的数据事实上存储于“基表”中,因此,其修改操作也会针对基表实现;其修改操作受基表限制;


DML: 

    INSERT, DELETE, UPDATE, SELECT


INSERT:

一次插入一行或多行数据;

Syntax:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

   [INTO] tbl_name [(col_name,...)]

   {VALUES | VALUE} ({expr | DEFAULT},...),(...),...

   [ ON DUPLICATE KEY UPDATE

     col_name=expr

       [, col_name=expr] ... ]


INSERT tbl_name [(col1,...)] VALUES (val1,...), (val2,...)


         Or:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

[INTO] tbl_name

SET col_name={expr | DEFAULT}, ...

        [ ON DUPLICATE KEY UPDATE

        col_name=expr

        [, col_name=expr] ... ]

DELETE:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name

   [WHERE where_condition]

   [ORDER BY ...]

   [LIMIT row_count]

注意:一定要有限制条件,否则将清空表中的所有数据;

限制条件:

WHERE

LIMIT


UPDATE:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference

SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...

[WHERE where_condition]

[ORDER BY ...]

[LIMIT row_count]

注意:一定要有限制条件,否则将修改所有行的指定字段;

限制条件:

WHERE

LIMIT


SELECT: 

Query Cache:查询缓存

查询执行路径中的组件:查询缓存、解析器、预处理器、优化器、查询执行引擎、存储引擎;


SELECT语句的执行流程:

       FROM Clause --> WHERE Clause --> GROUP BY --> HAVING Clause (过滤)--> ORDER BY --> SELECT --> LIMIT


单表查询:

SELECT

[ALL | DISTINCT | DISTINCTROW ]

[SQL_CACHE | SQL_NO_CACHE] 

select_expr [, select_expr ...]

[FROM table_references

[WHERE where_condition]

[GROUP BY {col_name | expr | position}

[ASC | DESC], ... [WITH ROLLUP]]

[HAVING where_condition]

[ORDER BY {col_name | expr | position}

[ASC | DESC], ...]

        [LIMIT {[offset,] row_count | row_count OFFSET offset}]

[FOR UPDATE | LOCK IN SHARE MODE]


DISTINCT: 数据去重;

SQL_CACHE: 显式指定存储查询结果于缓存之中;

SQL_NO_CACHE: 显式查询结果不予缓存;


query_cache_type的值为'ON'时,查询缓存功能打开;

SELECT的结果符合缓存条件即会缓存,否则,不予缓存;

显式指定SQL_NO_CACHE,不予缓存;

query_cache_type的值为'DEMAND'时,查询缓存功能按需进行;

显式指定SQL_CACHE的SELECT语句才会缓存;其它均不予缓存;


字段显示可以使用别名:

col1 AS alias1, col2 AS alias2, ...


WHERE子句:指明过滤条件以实现“选择”的功能:

过滤条件:布尔型表达式;

算术操作符:+, -, *, /, %

比较操作符:=, !=, <>, <=>, >, >=, <, <=


BETWEEN min_num AND max_num

IN (element1, element2, ...) #多值等于,等于集合中的一个即可

IS NULL

IS NOT NULL

LIKE: 

%: 任意长度的任意字符;

_:任意单个字符;

RLIKE:

REGEXP:匹配字符串可用正则表达式书写模式;


逻辑操作符:

NOT

AND

OR

XOR


GROUP:根据指定的条件把查询结果进行“分组”以用于做“聚合”运算:

avg(), max(), min(), count(), sum()

例:

    mysql> SELECT count(StuID) AS NOS,ClassessID FROM students GROUP BY ClassID;


HAVING: 对分组聚合运算后的结果指定过滤条件;

mysql>  SELECT count(StuID) AS NOS,ClassessID FROM students GROUP BY ClassID HAVING NOS>2;

ORDER BY: 根据指定的字段对查询结果进行排序;

升序:ASC

降序:DESC

mysql>  SELECT count(StuID) AS NOS,ClassessID FROM students GROUP BY ClassID HAVING NOS>2 ORDER BY Age DESC;


LIMIT [[offset,]row_count]:对查询的结果进行输出行数数量限制;


对查询结果中的数据请求施加“锁”:

FOR UPDATE: 写锁,排他锁;

LOCK IN SHARE MODE: 读锁,共享锁


练习:导入hellodb.sql生成数据库

(1) 在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄;

(2) 以ClassID为分组依据,显示每组的平均年龄;

(3) 显示第2题中平均年龄大于30的分组及平均年龄;

(4) 显示以L开头的名字的同学的信息;

(5) 显示TeacherID非空的同学的相关信息;

(6) 以年龄排序后,显示年龄最大的前10位同学的信息;

(7) 查询年龄大于等于20岁,小于等于25岁的同学的信息;用三种方法;


多表查询:

交叉连接:笛卡尔乘积;

内连接:

      等值连接:让表之间的字段以“等值”建立连接关系;

      例:SELECT * FROM students,teachers WHERE students.TeacherID=teachers.TID;

      不等值连接

       自然连接

       自连接

外连接:

    左外连接:

    FROM tb1 LEFT JOIN tb2 ON tb1.col=tb2.col

    右外连接

    FROM tb1 RIGHT JOIN tb2 ON tb1.col=tb2.col


子查询:在查询语句嵌套着查询语句 

基于某语句的查询结果再次进行的查询


用在WHERE子句中的子查询:

(1) 用于比较表达式中的子查询;子查询仅能返回单个值;

SELECT Name,Age FROM students WHERE Age>(SELECT avg(Age) FROM students);

(2) 用于IN中的子查询:子查询应该单键查询并返回一个或多个值从构成列表;

SELECT Name,Age FROM students WHERE Age IN (SELECT Age FROM teachers);

(3) 用于EXISTS;


用于FROM子句中的子查询;

使用格式:SELECT tb_alias.col1,... FROM (SELECT clause) AS tb_alias WHERE Clause; 

示例:

SELECT s.aage,s.ClassID FROM (SELECT avg(Age) AS aage,ClassID FROM students WHERE ClassID IS NOT NULL GROUP BY ClassID) AS s WHERE s.aage>30;


联合查询:UNION

SELECT Name,Age FROM students UNION SELECT Name,Age FROM teachers;


你可能感兴趣的:(mysql)