数据库查询操作(DQL)

来源:互联网 发布:java简单多线程 编辑:程序博客网 时间:2024/05/13 00:58

简单查询

简单查询:

语法:

SELECT {*, column [AS] [alias],...}

FROM    table_name;

说明:

SELECT  选择查询列表

FROM    提供数据源(表、视图或其他的数据源)

 

-------------------------------------------------------------------------------------------------------------------------------

范围查询

1.使用BETWEEN运算符显示某一值域范围的记录,这个操作符最常见的使用在数字类型数据的范围上,但对于字符类型数据和日期类型数据同样可用。

格式:

SELECT <selectList>

FROM table_name

WHERE 列名 BETWEEN minvalue AND maxvalue:闭区间。

 

2.使用IN运算符,判断列的值是否在指定的集合中。

格式:

SELECT <selectList>

FROM table_name

WHERE 列名 IN (1,值2....);

 

3.使用LIKE运算符执行通配查询,查询条件可包含文字字符或数字:

%:通配符:可表示零或多个字符。

_:通配符:可表示一个字符。

通配符:用来实现匹配部分值得特殊字符。

关键字:LIKE

-------------------------------------------------------------------------------------------------------------------------------

 

分页查询:

分页设计:

  假分页(逻辑分页):把数据全部查询出来,存在于内存中,翻页的时候,直接从内存中去截取.

  真分页(物理分页):每次翻页都去数据库中去查询数据.

 

  假分页: 翻页比较快,但是第一次查询很慢,若数据过大,可能导致内存溢出.

  真分页: 翻页比较慢,若数据过大,不会导致内存溢出.


规定:每页显示3条数据. pageSize = 3 ,currentPage = 1

第一页:   SELECT * FROM `product` LIMIT 0, 3

第二页:   SELECT * FROM `product` LIMIT 3, 3

第三页:   SELECT * FROM `product` LIMIT 6, 3

N:   SELECT * FROM `product` LIMIT (N-1)*3, 3


分页查询的SQL:

SELECT * FROM table_name LIMIT ?,?;

SELECT * FROM table_name LIMIT beginIndex,pageSize;

beginIndex = (currentPage-1) * pageSize;

第一个?: 表示本页,开始索引(0开始).

第二个?: 每页显示的条数

 -------------------------------------------------------------------------------------------------------------------------------


内连接查询

内连接查询:是相对于外连接。(两张表中只有满足等值条件的数据才会被查询出来)

内连接分为:隐式内连接、显示内连接,其查询效果相同,仅仅只是语法不同而已。

 

隐式内连接语法:

SELECT <selectList>

FROM  A ,B  WHERE A.= B.

显示内连接语法:

SELECT <selectList>

FROM A [INNER] JOIN B ON A.= B.

 

在做等值连接的时候,A表中和B表中的列名相同.则可以简写:

SELECT <selectList>

FROM  A [INNER] JOIN B USING(同名的列)

前提:empdept表中都有deptno.并且是外键关系。

: SELECT * FROM emp JOIN dept USING (deptno)

 

使用表名前缀在多个表中区分相同的列。

在不同表中具有相同列名的列可以用表的别名加以区分。

使用别名可以简化查询。

使用表名前缀可以提高执行效率。

如果使用了表的别名,则不能再使用表的真名

 -------------------------------------------------------------------------------------------------------------------------------


自连接查询:

   把一张表看成两张来做查询.

需求: 查询每个商品分类的名称和父分类名称:

 

隐式内连接:

SELECT sub.dirName,super.dirName

FROM productdir super,productdir sub

WHERE sub.parent_id = super.id

 

显示内连接:

SELECT sub.dirName,super.dirName

FROM productdir super JOIN productdir sub

ON sub.parent_id = super.id


外连接查询

外连接:解决内连接的数据丢失问题;

外连接分为:左连接,右连接,全连接;

 

左外连接:

SELECT table1.column, table2.column

FROM table1 LEFT [OUTER] JOIN table2 ON (table1.column_name = table2.column_name);

LEFT OUTER JOIN中,会返回所有左边表中的行,即使在右边的表中没有可对应的列值。即对连接中左边的表中的记录不加限制  

 

右外连接:

SELECT table1.column, table2.column

FROM table1 RIGHT [OUTER] JOIN table2 ON (table1.column_name = table2.column_name);

RIGHT OUTER JOIN中会返回所有右边表中的行,即使在左边的表中没有可对应的列值。即对连接中右边的表中的记录不加限制 


0 0