精华内容
下载资源
问答
  • 主要介绍了SqlServer给增加个字段的语法添加字段的语法非常简单,需要朋友参考下本文吧
  • sql指令和多表关系 ### 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,字段2FROM 表名 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;
    

    关联表

    关联关系

    1. 多对一:例:员工与部门的关系,将外键建立在多的一方
    2. 多对多:例:学生与课程之间的关系,需要定义一张中间表,该表存在两个外键分别连接两张表,这两个外键也是表的联合主键
    3. 一对一:例:人和省份证的关系,在任一张表中建立外键即可

    添加数据

    1. 多对一:先添加少的一方,再添加多的一方
    2. 多对多:先添加两个表,在添加关系表
    3. 一对一:先添加有外键的表,在添加无外键的

    删除数据

    1. 多对一:先删除多,再删一
    2. 多对多:先删关系,再删实体
    3. 一对一:先删无外键的表的数据,再删有外键的

    连接查询(多表查询)

    跨越多张表查询数据

    笛卡尔积查询:是两张表相乘的结果

    --假设有员工表(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;
    

    子查询

    1. 指一个查询语句嵌套在另一个查询语句内部的查询。
    2. 带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);
    
    1. 带EXISTS关键字的子查询:该关键字后面参数可以是任意子查询,相当于测试,返回TRUE或者FALSE,若为TRUE则执行外查询。
    --例一:查询emp表中是否存在大于21岁的员工,存在则查询dept表中所有的记录
    SELECT * FROM dept WHERE EXISTS (SELECT * FROM emp WHERE age>21);
    
    1. 带ANY关键字的子查询:只要满足子查询中的任意一个就返回结果
    --例一:查询部门表中id大于员工表中任意一的id的结果
    select * from dept where id>ANY(select dept_id from emp);
    
    1. 带ALL关键字的子查询:需要同时满足所有子查询结果。
    --例一:查询部门表中id大于员工表中所有id的结果
    select * from dept where id>ALL(select id from emp);
    
    1. 带比较运算符的子查询,即:>,<,=,<=,>=,=,!=。
    --例一:查询员工赵四所在的部门
    select name from dept where id=(select dept_id from emp where name='赵四');
    
    展开全文
  • SQL语法大全

    2014-03-30 11:00:11
    SQL语法大全 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语法值连接查询(多表查询) #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 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 语法按照某种条件地从中选取数据,可将 WHERE 子句添加到 SELECT 语句中。可用于WHERE字句运算符,大致如下:演示数据库WHERE 实例现在,我们希望从Students_hobby_t中获取Age字段值大于15学生...
  • SQL表中支持很固有类型,包括: 类型 含义 char(n) 存放固定长度字符串,用户指定长度为n。如果没有使用n个长度则会在末尾添加空格。 varchar(n) 可...
  • 含义:从数据库一个或中导出虚拟 作用: 方便用户操作: 要求所见即所需,无需添加额外查询条件,直接查看 增加数据安全性:通过视图,用户只能查看或修改指定数据 提高表的独立逻辑性:原有数据...
  • 目录一、SQL语言1 数据库定义语言 DDLCREATEALTERDROP2 数据库操作语言 DMLINSERTUPDATEDELETE3 数据库查询语言 DQLSELECT简单查询带关系运算符的的查询高级查询4 数据库控制语言 DCL二、其他基本操作语法语法表的...
  • 1、 用向导创建为空约束代码创建使用t-sql添加空约束的语法格式是:2、 主键约束概念:主键即为主关键字是被挑选出来,作表的唯一标识候选关键字。一个只有一个主键。主键可以由一个字段组成,也可以由个字段...
  • sql语句创建关联和简单查询简单介绍表的创建==创建数据库====创建一个用户并授权====指定使用某个数据库====老师、班级、学生====给老师创建一个唯一索引====添加外键,使关联====往内插入...
  • SQL VIEW 使用语法

    2015-07-29 20:46:00
    之前一直都不知道VIEW有什么作用,写程序时候也很少遇到过,复习...视图中字段就是来自一个或个数据库中真实的表字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这...
  • 含义:又称多表查询,当查询字段来自于多个表时,就会用到连接查询 笛卡尔乘积现象:表1 有m行,表2有n行,结果=m*n行 发生原因:没有有效连接条件 如何避免:添加有效连接条件 分类: 按年代分类: sql...
  • 视图是可视化的表。 在 SQL 中,视图是基于 SQL 语句结果集 可视...我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。 注释:数据库设计和结构不会受...
  • 1.多表查询 查询语法: select 列名列表 from 表名列表 where ...... 准备的SQL: -- 准备表 -- 创建部门表 CREATE TABLE department( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); -- 为部门...
  • 将左边表的左右结果都显示出来,右边不符合on 中条件显示null, on中条件不会限制左表的数据,on中条件只会限制右表的数据也可以用and添加多个条件 right join 右连接 跟左连接道理一样,右边全显示,on...
  • 一、SQL语句介绍。 二、Oracle字段数据类型。 三、创建。 四、添加约束。 五、插入数据。 (1)、单条数据插入。 (2)条数据插入。 (3)查询结果备份(存储)。 (4)查询并插入他。 六、简单查询...
  • 含义:又称为多表查询,当查询字段涉及到多个表时 笛卡尔乘积现象:表1有m行,表2有n行,结果m*n行 发生原因:没有有效连接条件 如何避免:添加有效连接条件 分类: 1.按年代分类: sql92标准–仅仅支持内...
  • 含义:又称多表查询,当查询字段来自于多个表时,就要用到连接查询 笛卡尔积现象:表1 有m行,表2有n行,结果有m*n行 发生原因:没有有效连接条件 如何避免:添加有效连接条件 分类: 按年代分类: sql92标准...
  • Hive分区表添加分区时注意事项

    千次阅读 2016-06-09 13:29:14
    来说,Hive相当于在hadoop之上加了一个SQL语法层,它提供了客户端与接口供使用人员与hadoop间接交互,简化了hadoop使用。它接收SQL语句,转换成MapReduce任务,供hadoop执行。而且SQL语法很规范哦,上手很简单...
  • **设计mybatis数据权限拦截器,根据不同数据源#不同表字段有相关预设数据权限值或者取值范围,但我们知道sql多表有别称或者嵌套sql语句内,没有where条件情况可能需要去添加where** 举个例子: > ...
  • 问题是这样子,我系统中用到了个数据库,然后因为各个数据库中某些数据需要同步,所以我就在其中某个数据库中的表添加触发器,来同步更新其它数据库中数据。举例如下:有两个数据库A和B,分别有a1与...
  • 2、双击左侧数据或字段,再sql语句中自动添加。 3、输入sql语句时,自动提醒关键字和表名,点击空格或回车自动完成,基本是模拟VS2005风格和用法。 4、系统自动判断关键字,然后会相应染色。 5、输入表名后,...
  • 通过Insert select 语句将现有的表的数据添加到已存在的表语法:Insert into<新表名>(列名) select<列名>from<旧表名>注意:AddressList必须预先创建,并具有列名 通过select into 语句....
  • 在做数据库设计时候,字段/表的 描述/备注 字段设置...我先想能不能直接在create table时候直接添加描述字段,不过找遍了sql的语法也不支持这种写法,使用sp_addextendedproperty 我又感觉太麻烦,很没必要...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 295
精华内容 118
关键字:

多表添加的sql语法