动态做网站,网络开发公司简介,重庆有的设计网站大全,宁城网站建设公司笛卡尔积#xff08;或交叉连接#xff09;: 笛卡尔乘积是一个数学运算。假设我有两个集合 X 和 Y#xff0c;那么 X 和 Y 的笛卡尔积就是 X 和 Y 的所有可能组合#xff0c;也就是第一个对象来自于 X#xff0c;第二个对象来自于 Y 的所有可能。组合的个数即为两个集合中…笛卡尔积或交叉连接: 笛卡尔乘积是一个数学运算。假设我有两个集合 X 和 Y那么 X 和 Y 的笛卡尔积就是 X 和 Y 的所有可能组合也就是第一个对象来自于 X第二个对象来自于 Y 的所有可能。组合的个数即为两个集合中元素个数的乘积数。 使用 CROSS JOIN表示交叉连接。它的作用就是可以把任意表进行连接即使这两张表不相关。
1.多表联查
多表查询也称为关联查询指两个或更多个表一起完成查询操作。
前提条件这些一起查询的表之间是有关系的一对一、一对多它们之间一定是有关联字段这个关联字段可能建立了外键也可能没有建立外键。
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 table2.column2; #连接条件
1.等值连接和非等值连接
SELECT employees.employee_id, employees.last_name, employees.department_id, departments.department_id,departments.location_id
FROM employees, departments
WHERE employees.department_id departments.department_id;
表的别名使用别名可以简化查询。列名前使用表名前缀可以提高查询效率。 使用别名后
SELECT e.employee_id, e.last_name, e.department_id,d.department_id, d.location_id
FROM employees e , departments d
WHERE e.department_id d.department_id;等值是where条件那一行在两表中的值是相等的。 非等值是where条件那一行的值不与另一表中的行相等而是其他关系。
非等值例子EMPLOYEES表中员工工资应在JOB_GRADES表的最高工资和最低工资之间。
SELECT e.last_name, e.salary, j.grade_level
FROM employees e, job_grades j
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;
2.自连接
当table1和table2本质上是同一张表只是用取别名的方式虚拟成两张表以代表不同的意义。然后两个表再进行内连接外连接等查询。
SELECT CONCAT(worker.last_name , works for , manager.last_name)
FROM employees worker, employees manager
WHERE worker.manager_id manager.employee_id ;
3.内连接外连接 内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行 外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左或右表中不满足条件的行 这种连接称为左或右 外连接。没有匹配的行时, 结果表中相应的列为空(NULL)。 如果是左外连接则连接条件中左边的表也称为主表右边的表称为从表。 如果是右外连接则连接条件中右边的表也称为主表左边的表称为从表。
9种Join方式 1inner
SELECT o.order_id, o.customer_id, o.order_date, o.amount, c.customer_name
FROM orders o
INNER JOIN customers c
ON o.customer_id c.customer_id;不包含不匹配的指的是行不是列属性。
2LEFT JOIN
左外连接则连接条件中左边的表也称为主表右边的表称为从表。
SELECT o.order_id, o.customer_id, c.customer_id, o.order_date, o.amount, c.customer_name
FROM orders o
LEFT JOIN customers c
ON o.customer_id c.customer_id;4RIGHT JION
右外连接则连接条件中右边的表也称为主表左边的表称为从表。
5LEFT JOIN WHERE IS NULL
左为主表把两个表相同的部分行扣去
SELECT o.order_id, o.customer_id, c.customer_id, o.order_date, o.amount, c.customer_name
FROM orders o
LEFT JOIN customers c
ON o.customer_id c.customer_id;
WHERE c.customer_id IS NULL6RIGHT JOIN WHERE IS NULL
右为主表把两个表相同的部分行扣去
UNION
合并查询结果 利用UNION关键字将多条SELECT语句的结果组合成单个结果集。合并时两个表对应的列数和数据类型必须相同并且相互对应。各个SELECT语句之间使用UNION或UNION ALL关键字分隔。
UNION 操作符返回两个查询的结果集的并集去除重复记录。UNION ALL操作符返回两个查询的结果集的并集。对于两个结果集的重复部分不去重。
这个博客介绍得很详细例子也很清楚 MYSQL多表查询
2.单表查询
select 字段列表
from 表名列表
where 条件列表
group by分组字段
having分组后条件
order by排序字段
limit分页限定条件查询 查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息select * from stu where age 18 or age 20 or age 22;
select * from stu where age in (18,20 ,22);null值的比较不能使用 或者 ! 。需要使用 is 或者 is notselect * from stu where english is null;
select * from stu where english is not null;
模糊查询
模糊查询使用like关键字可以使用通配符进行占位:
1_ : 代表单个任意字符
2% : 代表任意个数字符 select * from stu where name like _花%;排序查询
select 字段列表 from 表名 order by 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …; ASC 升序排列 默认值 DESC 降序排列 注如果有多个排序条件当前边的条件值一样时才会根据第二条件进行排序
查询学生信息按照年龄升序排列
select * from stu order by age ;查询学生信息按照数学成绩降序排列select * from stu order by math desc ;查询学生信息按照数学成绩降序排列如果数学成绩一样再按照英语成绩升序排列select * from stu order by math desc , english asc ;聚合查询
函数名 功能 count(列名) 统计数量一般选用不为null的列 max(列名) 最大值 min(列名) 最小值 sum(列名) 求和 avg(列名) 平均值
select 聚合函数名(列名) from 表;
注意null 值不参与所有聚合函数运算统计班级一共有多少个学生
select count(*) from stu;查询数学成绩的最高分
select max(math) from stu;查询数学成绩的最低分
select min(math) from stu;查询数学成绩的总分
select sum(math) from stu;查询数学成绩的平均分
select avg(math) from stu;查询英语成绩的最低分
select min(english) from stu;分页查询
select 字段列表 from 表名 limit 起始索引 , 查询条目数;起始索引计算公式 起始索引 (当前页码 - 1) * 每页显示的条数
从0开始查询查询3条数据
select * from stu limit 0 , 3;每页显示3条数据查询第1页数据
select * from stu limit 0 , 3;每页显示3条数据查询第2页数据
select * from stu limit 3 , 3;每页显示3条数据查询第3页数据
select * from stu limit 6 , 3;