-
SqlServer给表增加多个字段的语法
2020-09-09 13:56:42主要介绍了SqlServer给表增加多个字段的语法,添加字段的语法非常简单,需要的朋友参考下本文吧 -
SQL语法 (排序、聚合、分组、分页) 多表关系,多表查询
2020-09-24 14:08:19sql指令和多表关系 ### 1. 排序 (order by) 数据库的查询(排序:order by) 默认是按升序排列的,但是升序ASC最好写上,代码可读性! SELECT * FROM 表名 ORDER BY 排序字段 ASC(升序)|DESC(降序); 如果排序列的值...文章目录
SQL语法
1. 排序 (order by)
SELECT * FROM 表名 ORDER BY 排序字段 ASC(升序)|DESC(降序);
- 数据库的查询(排序:order by) 默认是按升序排列的,但是升序ASC最好写上,代码可读性!
- distinct去掉重复
select distinct * from 表名 order by column1,column2,column3 desc;
(去重) - 如果排序列的值相同,通过添加条件,可以再加一个来进行排序
select * from 表名 order by column1,column2,column3 desc;
按照降序查找,首先按照column1列名排序,如果column1的值相同,再按照column2排序,类推特点:
-
指定列(一个条件一个列,多个条件多个列,排在前面的优先级高)
-
指定升序或者降序
-
order by 排序只对数字和英文字符串有效,排序对汉字无效,符合字典顺序(字母、数字顺序)
排序对汉字无效的解决办法 - > 通过汉字生成拼音,然后按照拼音(字典)顺序
2. 聚合函数
聚合函数(类似于Java中的方法: 函数名())
五个常用的聚合函数聚合函数名 描述 count 统计指定列不为NULL的记录行数(如果有NULL值,则不统计) sum 计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0 max 计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算 min 计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算 avg 计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0 语句执行顺序
SELECT COUNT(*) FROM product WHERE price > 200;
执行顺序:from -> where -> 聚合函数
3. 分组 (group by)(条件只能用having)
SELECT 字段1,字段2… FROM 表名 GROUP BY 分组字段 HAVING 分组条件;
- 将数据按照某个规则或者某个特征分成N组(一般不对id进行分组,因为id唯一,分组就只有一个或零个,没有意义)
- 只起到分组的作用,没有统计作用(一般配合聚合函数count来统计结果)
- 如果是对分组之后的结果再进行过滤,则必须使用having 不能使用where
语句执行顺序
from -> group by -> 聚合函数(count) -> having -> select
4. 分页显示(limit [***])
SELECT 字段1,字段2... FROM 表名 LIMIT M,N
SELECT 字段1,字段2… FROM 表名 LIMIT M,N
M:表示从哪一行的索引(从0开始)开始显示
N:表示要显示几行
第1页: M=N*(1-1) 第2页: M=N*(2-1)
第page页: M=N*(page-1) 开始(page一般会显示在url地址上,方便读取)数据库分页也是在数据库里写查询语句,不同的是查询的都是指定条数到指定条数的数据,不是一次性把数据全查出来。
多表关系
在实际的开发中,项目一定是有多张表组成的,这些表之间有着对应关系。
表与表之间的关联关系主要是:- 一对一关联 (A表的一行对应B表的一行,反之也成立,此时,两张表可以合并成一张表)
- 一对多关联 (A表的一行对应B表的多行,反之不成立)
一对多关联,A表的一行对应B表的多行,在B表中要有外键对应A表的主键 - 多对多关联 (A表的一行对应B表的多行,B的一行对应A表的多行)
多对多关联,要创建中间表,分别对应A、B两表的主键作为外键。
多表查询
1.交叉连接查询
交叉连接查询是将两张表相乘,就是就笛卡尔集。(A和B —> A * B)
多表查询可以理解成在笛卡尔集的基础上进行条件筛选
2. 内连接(inner join 条件用on)
求的是多张表的交集 - 本质就是在笛卡尔集上加条件
两种实现方法:
-
隐式内连接:select * from A,B where 条件;
-
显式内连接:select * from A inner join B on 条件;(效率更高) (因为用了inner join关键字,能够直接识别是内连接查询,所以叫显式内连接)
两者区别:
隐式内连接在笛卡尔集的基础上筛选(需要先求出笛卡尔集)
显式内连接是直接在原始表上筛选,效率更高。
3. 外连接(outer join)
select * from tableA left outer join tableB tableA.id = tableB.id_fk;
外连接就是两个表中选一个表将数据全部输出,另一个表没有对应数据则输出NULL
有两种外连接方式:
- 左外连接以左表为主,左表中的数据全部输出,右表中如果没有同等的数据则补NULL(left outer join)
- 右外连接以右表为主,右表中的数据全部输出,左表中如果没有同等的数据则补NULL(right outer join)
4. 子查询
子查询就是select语句的嵌套:一个select的查询结果作为另一个select查询语法的一部分
select *from User where cid = (select cid from category where cname='电子')
-
五、SQL多表查询语法
2019-07-16 09:43:16外键 可以明确的声明表和表之间的字段的...为表添加外键 创建表的时候声明外键 FOREIGN KEY(ordersid) REFERENCES ORDERS(id); --例如:为职员表添加外键关联部门表 create table dep( id int primary key auto_i...外键
可以明确的声明表和表之间的字段的关系,使数据库帮我们维护这种关系,这就是外键。如果一个操作破坏这种外键约束,则数据库会阻止这个操作。
为表添加外键
创建表的时候声明外键
FOREIGN KEY(ordersid) REFERENCES ORDERS(id); --例如:为职员表添加外键关联部门表 create table dep( id int primary key auto_increment, name varchar(40) ); create table emp( id int primary key auto_increment, name varchar(40), dept_id int, foreign key(dept_id) references dep(id) );
添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT FK_ID FOREIGN KEY(字段名) REFERENCES 外表表名(主键字段名); --FK_ID指该外键的名称, --例:为员工表(emp)添加外键为部门表(dept)的id alter table emp add constraint aaa_fk foreign key(dep_id) references dept(id);
删除外键约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名; --例一:删除员工表的外键 alter table emp drop foreign key aaa_fk;
关联表
关联关系
- 多对一:例:员工与部门的关系,将外键建立在多的一方
- 多对多:例:学生与课程之间的关系,需要定义一张中间表,该表存在两个外键分别连接两张表,这两个外键也是表的联合主键
- 一对一:例:人和省份证的关系,在任一张表中建立外键即可
添加数据
- 多对一:先添加少的一方,再添加多的一方
- 多对多:先添加两个表,在添加关系表
- 一对一:先添加有外键的表,在添加无外键的
删除数据
- 多对一:先删除多,再删一
- 多对多:先删关系,再删实体
- 一对一:先删无外键的表的数据,再删有外键的
连接查询(多表查询)
跨越多张表查询数据
笛卡尔积查询:是两张表相乘的结果
--假设有员工表(emp)的dept_id和部门表(dept)的id对应 --查询两张表 SELECT * FROM dept,emp;
内连接查询:查询出左边表也有且右边表也有的记录
SELECT * FROM dept,emp WHERE dept.id=emp.dept_id; --或者 SELECT * FROM dept INNER JOIN emp ON dept.id=emp.dept_id;
外连接查询
左外连接查询:在内连接的基础上增加上左边表有而右边表没有的记录
SELECT * FROM dept LEFT JOIN emp ON dept.id=emp.dept_id;
右外连接查询
SELECT * FROM dept RIGHT JOIN emp ON dept.id=emp.dept.id;
全外连接查询:MySQL不支持全外连接
SELECT * FROM dept FULL JOIN ON dept.id=emp.dept_id;
--合并查询结果(union) SELECT * FROM dept LEFT JOIN emp ON dept.id=emp.dept_id; UNION SELECT * FROM dept RIGHT JOIN emp ON dept.id=emp.dept.id;
--例一:查询4号部门的名称和其中员工的姓名 select dept.name 部门名称,emp.name 员工名称 from dept inner join emp on dept.id=emp.dept_id where dept.id=4;
子查询
- 指一个查询语句嵌套在另一个查询语句内部的查询。
- 带IN关键字的子查询:内层查询语句仅仅返回一个数据列,这个数据列中的值供外层查询语句进行比较操作
--例一:查询存在年龄为20岁的员工的部门 SELECT * FROM dept WHERE emp_id IN(SELECT emp_id FROM emp WHERE age=20); --例二:使用NOT IN查询没有20岁的员工的部门 SELECT * FROM dept WHERE emp_id NOT IN(SELECT emp_id FROM emp WHERE age=20);
- 带EXISTS关键字的子查询:该关键字后面参数可以是任意子查询,相当于测试,返回TRUE或者FALSE,若为TRUE则执行外查询。
--例一:查询emp表中是否存在大于21岁的员工,存在则查询dept表中所有的记录 SELECT * FROM dept WHERE EXISTS (SELECT * FROM emp WHERE age>21);
- 带ANY关键字的子查询:只要满足子查询中的任意一个就返回结果
--例一:查询部门表中id大于员工表中任意一的id的结果 select * from dept where id>ANY(select dept_id from emp);
- 带ALL关键字的子查询:需要同时满足所有子查询结果。
--例一:查询部门表中id大于员工表中所有id的结果 select * from dept where id>ALL(select id from emp);
- 带比较运算符的子查询,即:>,<,=,<=,>=,=,!=。
--例一:查询员工赵四所在的部门 select name from dept where id=(select dept_id from emp where name='赵四');
-
SQL语法大全
2014-03-30 11:00:11SQL语法大全 SQL语法大全 1. ASP与Access数据库连接: dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access ... -
MySQL入门 DQL语言之七:sql92语法值连接查询(多表查询)
2019-01-06 23:47:41MySQL入门 DQL语言之六:sql92语法值连接查询(多表查询) #6:连接查询 /* 含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询 笛卡尔集乘积现象:表1 有n行,表2有m行,结果等于n*m行 发生原因...MySQL入门 DQL语言之六:sql92语法值连接查询(多表查询)
#6:连接查询
/*
含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询笛卡尔集乘积现象:表1 有n行,表2有m行,结果等于n*m行
发生原因:
①没有有效的连接条件
②省略连接条件
③所有表中的所有行相互连接
如何避免:添加有效的连接条件分类:
按年代分类:
sql92标准:仅仅支持内连接
sql99标准【推荐】:支持内连接+外链接(左外和右外)+交叉链接
按功能分类:
内连接:
等值连接
非等值连接
自连接
外链接:
左外连接
右外链接
全连接
交叉链接
*/
SELECT * FROM beauty;
SELECT * FROM boys;
#这样会产生笛卡尔集,即是两个表的总行数相乘
SELECT NAME,boyName FROM boys,beauty;
#添加有效连接条件
SELECT NAME,boyName FROM boys,beauty
WHERE beauty.`boyfriend_id` = boys.`id`;#一:sql92标准
#1、等值连接
/*
①多表等值连接的结果为多表的交集部分
②N表连接,至少需要n-1个连接条件
③多表连接的顺序没要求
④一般需要为表起别名
⑤可以搭配前面介绍的所有子句的使用(排序、分组等)
*/
#案1:查询女神名对应的男神名
SELECT NAME,boyName FROM boys,beauty
WHERE beauty.`boyfriend_id` = boys.`id`;#案例2:查询部门名和对应的部门名
SELECT last_name,department_name
FROM employees,departments
WHERE employees.`department_id` = departments.`department_id`;#2、为表起别名
/*
①提高语句的简洁度
②区分多个重名的字段注意:如果为表起了别名,则查询字段就不能用原来的表名去限定
*/
#查询员工名、工种号、工种名
SELECT last_name,e.job_id,job_title
FROM employees AS e,jobs j
WHERE e.`job_id` = j.`job_id`;#3、两个表顺序是否可以调换
#查询员工名、工种号、工种名
SELECT last_name,e.job_id,job_title
FROM jobs j,employees AS e
WHERE j.`job_id` = e.`job_id` ;#4、可以加筛选
#案例:查询有奖金的员工名、和部门名
SELECT last_name ,department_name,commission_pct
FROM employees e,departments d
WHERE e.`department_id` = d.`department_id`
AND e.`commission_pct` IS NOT NULL;#案例2:查询城市民中第二个字符为0的部门名和城市名
SELECT department_name,city
FROM departments d,locations l
WHERE l.`location_id` = d.`location_id`
AND city LIKE '_o%'#5、可以加分组
#案例1:查询每个城市的部门个数
SELECT COUNT(*) 个数,city
FROM departments d,locations l
WHERE d.`location_id` = l.`location_id`
GROUP BY city;#案例2:查询出有奖金的每个部门的部门的领导编号和该部门的最低工资
SELECT department_name,d.manager_id,MIN(salary)
FROM employees e,departments d
WHERE e.`department_id` = d.`department_id`
AND commission_pct IS NOT NULL
GROUP BY department_name,d.`manager_id`;
#6、可以加排序
#案例:每个工种的工种名和员工个数并且按员工个数降序
SELECT j.`job_title`,COUNT(*)
FROM jobs j,employees e
WHERE j.`job_id` = e.`job_id`
GROUP BY j.`job_title`
ORDER BY COUNT(*) DESC;#7、可以实现三表连接
#案例:查询员工名、部门名和所在的城市
SELECT last_name,department_name,city
FROM employees e,departments d,locations l
WHERE e.`department_id` = d.`department_id`
AND d.`location_id` = l.`location_id`;#二、非等值连接
#案例1:查询出员工的工资和工资级别
SELECT salary,grade_level
FROM employees e,job_grades j
WHERE e.`salary` BETWEEN j.`lowest_sal` AND j.`highest_sal`
AND grade_level = 'A';#二、自连接
#案例1:查询员工名和上级的名称
SELECT e.employee_id,e.last_name,m.employee_id,m.last_name
FROM employees e,employees m
WHERE e.`manager_id` = m.`employee_id`; -
SQL语法1
2018-07-21 08:57:53-- 给表里面的某一列添加注释 comment on column emp.job is '工作'; -- DML 中的Select -- 如果想查询表中的某一列 select ename from emp; -- 查询表中的多列 select empno,ename,job from emp; -- 将表中所有的...-- 给表里面的某一列添加注释 comment on column emp.job is '工作'; -- DML 中的Select -- 如果想查询表中的某一列 select ename from emp; -- 查询表中的多列 select empno,ename,job from emp; -- 将表中所有的列都查出来 select * from emp; --给列取别名 select job "工 作" ,ename "姓名" from emp; -- 给表取别名 select e.* from emp e; -- 去除重复数据 --distinct 后面跟的是判断是否为重复数据的列 如果全部列重复才为重复数据 则distinct 后面加* select distinct * from emp; -- where 条件筛选数据 -- oracle 中判断数据是否为null 使用 is null 或者is not null select * from emp where comm is null; -- in (list) select ename,sal from emp where sal in (800,1250,3000,2500); -- not in (list) select ename,sal from emp where sal not in (800,1250,3000,2500); -- between and 查询一个范围内的数据 select * from emp where sal between 1500 and 3000; -- <> 不等于 select * from emp where sal <>3000; -- not and or select * from emp where sal > 3000 and deptno = 10; -- 列出来 部门为20 或者30 并且薪水大于3000 的所有员工 select * from emp where (deptno = 10 or deptno = 100) and sal >1000;
-
sql不包含的条件语句_SQL语法基础——条件过滤WHERE 语句
2020-12-08 11:21:50SQL WHERE 语法按照某种条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。可用于WHERE字句的运算符,大致如下:演示数据库WHERE 实例现在,我们希望从Students_hobby_t表中获取Age字段值大于15的学生... -
mysql和oraclesql语法的区别
2016-04-28 16:58:32数据库oracle与mysql在语法上的区别不是很多,但是也有一些。下面是部分参考: 1,oracle没有offet,limit,在mysql中我们用它们来控制显示的行数,最多的是分页了。oracle要分页的话,要换成rownum。 2... -
sql语句where条件in_SQL语法基础——条件过滤WHERE 语句
2021-01-25 03:58:50SQL WHERE 语法按照某种条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。可用于WHERE字句的运算符,大致如下:演示数据库WHERE 实例现在,我们希望从Students_hobby_t表中获取Age字段值大于15的学生... -
数据库(一):SQL语法
2020-05-17 22:10:34SQL表中支持很多固有类型,包括: 类型 含义 char(n) 存放固定长度的字符串,用户指定长度为n。如果没有使用n个长度则会在末尾添加空格。 varchar(n) 可... -
SQL语法整理(五)-视图
2020-09-15 10:13:08含义:从数据库一个或多个表中导出的虚拟表 作用: 方便用户操作: 要求所见即所需,无需添加额外的查询条件,直接查看 增加数据的安全性:通过视图,用户只能查看或修改指定的数据 提高表的独立逻辑性:原有数据表... -
【笔记整理】—— 2.4 SQL语言 | 查询 | 表的约束 | 多表操作
2020-04-05 21:33:27目录一、SQL语言1 数据库定义语言 DDLCREATEALTERDROP2 数据库操作语言 DMLINSERTUPDATEDELETE3 数据库查询语言 DQLSELECT简单查询带关系运算符的的查询高级查询4 数据库控制语言 DCL二、其他基本操作语法语法表的... -
sql server 添加check约束验证约束是出错怎么办_SQL中用T-SQL操作表约束
2021-01-25 14:09:291、 用向导创建为空约束代码创建使用t-sql添加空约束的语法格式是:2、 主键约束概念:主键即为主关键字是被挑选出来,作表的唯一标识的候选关键字。一个表只有一个主键。主键可以由一个字段组成,也可以由多个字段... -
sql语句的创建关联表和简单的跨表查询
2019-03-28 20:22:21sql语句的创建关联表和简单的跨表查询简单介绍表的创建==创建数据库====创建一个用户并授权====指定使用某个数据库====老师表、班级表、学生表====给老师表创建一个唯一索引====添加外键,使表关联====往表内插入... -
SQL VIEW 使用语法
2015-07-29 20:46:00之前一直都不知道VIEW有什么作用,写程序的时候也很少遇到过,复习...视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这... -
MySQL从入门到精通之SQL92语法中的连接查询
2019-08-20 11:03:27含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询 笛卡尔乘积现象:表1 有m行,表2有n行,结果=m*n行 发生原因:没有有效的连接条件 如何避免:添加有效的连接条件 分类: 按年代分类: sql... -
常用 SQL 通用语法 - DDL - 视图
2018-04-12 16:11:04视图是可视化的表。 在 SQL 中,视图是基于 SQL 语句的结果集 的 可视...我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。 注释:数据库的设计和结构不会受... -
MySQL学习笔记之10-SQL之多表查询
2019-09-22 15:55:471.多表查询 查询语法: select 列名列表 from 表名列表 where ...... 准备的SQL: -- 准备表 -- 创建部门表 CREATE TABLE department( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); -- 为部门表... -
数据库sql语法 inner join ,join,left join,full join,group by
2015-01-27 14:33:12将左边表的左右结果都显示出来,右边表不符合on 中的条件的显示null, on中的条件不会限制左表的数据,on中的条件只会限制右表的数据也可以用and添加多个条件 right join 右连接 跟左连接道理一样,右边表全显示,on... -
Oracle的sql基本语法总结(1) -- 创建、插入、查询备份、更新、删除
2019-12-13 21:53:43一、SQL语句介绍。 二、Oracle字段数据类型。 三、创建表。 四、添加约束。 五、插入数据。 (1)、单条数据插入。 (2)多条数据插入。 (3)查询结果的备份(存储)。 (4)查询并插入他表。 六、简单查询... -
【page】mysql笔记(七) sql92语法--连接查询
2019-10-17 22:11:13含义:又称为多表查询,当查询的字段涉及到多个表时 笛卡尔乘积现象:表1有m行,表2有n行,结果m*n行 发生原因:没有有效的连接条件 如何避免:添加有效的连接条件 分类: 1.按年代分类: sql92标准–仅仅支持内... -
sql92语法连接查询(等值连接,非等值连接,自连接)
2021-02-20 22:22:42含义:又称多表查询,当查询的字段来自于多个表时,就要用到连接查询 笛卡尔积现象:表1 有m行,表2有n行,结果有m*n行 发生原因:没有有效的连接条件 如何避免:添加有效的连接条件 分类: 按年代分类: sql92标准... -
Hive分区表添加分区时的注意事项
2016-06-09 13:29:14总的来说,Hive相当于在hadoop之上加了一个SQL语法层,它提供了客户端与接口供使用人员与hadoop间接交互,简化了hadoop的使用。它接收SQL语句,转换成MapReduce任务,供hadoop执行。而且SQL语法很规范哦,上手很简单... -
如何将外部条件根据SQL中的表信息动态拼接到正确的位置?
2020-04-30 17:19:50**设计的mybatis数据权限拦截器,根据不同数据源#不同表的字段有相关的预设的数据权限值或者取值范围,但我们知道sql中多表有别称或者嵌套sql语句内,没有where条件的情况可能需要去添加where** 举个例子: > ... -
数据库表同义词mysql修改_SQLServer中同义词Synonym的用法
2021-01-30 20:10:52问题是这样子的,我的系统中用到了多个数据库,然后因为各个数据库中的某些数据需要同步,所以我就在其中的某个数据库中的表中添加触发器,来同步更新其它数据库中的数据。举例如下:有两个数据库A和B,分别有表a1与... -
C# 写的数据库查看器 支持SQL2000和oracle10g 高亮语法输入提醒
2009-09-14 17:12:012、双击左侧数据表或字段,再sql语句中自动添加。 3、输入sql语句时,自动提醒关键字和表名,点击空格或回车自动完成,基本是模拟VS2005的风格和用法。 4、系统自动判断关键字,然后会相应的染色。 5、输入表名后,... -
Sql-Server用insert插入多行数据-语法和例子
2019-10-07 11:22:16通过Insert select 语句将现有的表的数据添加到已存在的表中语法:Insert into<新的表名>(列名) select<列名>from<旧的表名>注意:AddressList表必须预先创建,并具有列名 通过select into 语句.... -
SqlServer 2005 快速设置字段/表 的描述字段
2009-05-26 09:45:00在做数据库设计的时候,字段/表的 描述/备注 字段设置...我先想能不能直接在create table的时候直接添加描述字段,不过找遍了sql的语法也不支持这种写法,使用sp_addextendedproperty 我又感觉太麻烦,很多没必要...
-
Galera 高可用 MySQL 集群(PXC v5.7+Hapro)
-
pdf是图片还是文档
-
【数据结构】并查集:LeetCode题 547.朋友圈问题
-
CSS常用样式汇总:
-
Nonpolarizing guide-mode resonance filter with ultra-narrow linewidth
-
朱老师c++课程第3部分-3.5STL的其他容器讲解
-
bdb:Eine简单的Beschlussdatenbank-源码
-
西工大noj(11~20)
-
Web全栈~36.Servlet
-
一种变容量的自嵌入图像易碎水印算法
-
ActivityMQ的基本概念和应用场景
-
PAT甲级-排序类型-1062 Talent and Virtue解题思路
-
用Java实现DQN,训练不会死的FlappyBird
-
Nondestructive identification of ancient Chinese glasses by Raman and proton-induced X-ray emission spectroscopy
-
libFuzzer视频教程
-
基于python的dango框架购物商城毕业设计毕设源代码使用教程
-
QTP自动化测试原理
-
深究字符编码的奥秘,与乱码说再见
-
程序员必修基础套餐课
-
Buffer count exceeding default GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS. Shader might not work on all h