精华内容
下载资源
问答
  • 数据库多表查询SQL语句

    千次阅读 2015-09-25 12:34:29
    最近在做“进销存业务系统”,作为项目组成员的一部分,我负责统计查询,简单说就是多表查询,网上有很,但是很明确的却没有,所以让我这个初学者了费,最终还是搞出来了,在这里也和大家共享一下成果和其中出现的...

    最近在做“进销存业务系统”,作为项目组成员的一部分,我负责统计查询,简单说就是多表查询,网上有很多,但是很明确的却没有,所以让我这个初学者了费,最终还是搞出来了,在这里也和大家共享一下成果和其中出现的问题,高手可绕道,不求点赞,只为方便大家。下面开始:

    我一共建了4个表,分别是Supplier、PurchaseMaster、PruchaseDetail、Product四个表(大家在测试的时候可以随意建,但是一定要看好我的表之间的关联关系)
    表结构:
    Supplier:SupplierID、 SupplierSimpleName

    PurchaseMaster:PurchaseID、SupplierID

    PruchaseDetail:PurchaseID、ProductID、PurchaseQuantity、PurchaseAmount

    Product:ProductID、ProductName

    我们要查询的是SupplierID、 SupplierSimpleName、PurchaseQuantity、PurchaseAmount、ProductName

    从表结构上可以看出,各个表之间只有一个相同属性,而且每个表之间还不相同,从查询结果上来看其实与PurchaseMaster表没有什么关系,但实际上它却起到了一个连接性的作用。所以必不可少。现在我们的要求是根据SupplierID去查询我们要查询的这个项内容,查询语句如下:

    SELECT s.SupplierID,s.SupplierName,
           pd.PurchaseQuantity,pd.PurchaseAmount,p.ProductName
    
    from Supplier s,PurchaseMaster pm,purchasedetail pd,product p
    
    where s.SupplierID = pm.SupplierID AND pm.PurchaseID = pd.PurchaseID 
         AND pd.ProductID = p.ProductID

    输出结果如下:
    这里写图片描述

    其中出现的问题:

    1、大家可以看到我在数据库里建的表都是大写字母开头,但是我在from语句后面跟的却有小写,所以这里并不影响,但是当你输入的时候会有提示,最好根据提示来,否则容易出错,我写的时候就是因为form后面的purchasedetail pd,开始用的大写的P,所以一直出不来,所以这些语句,最好用提示,凡是提示不出来的都有可能出现错误。

    2、如果是已经知道要查询的SupplierID是多少,那么在where后面加上s.SupplierID = “001”并用and连接即可。

    3、网上有很多关于多表查询的SQL语句,什么左右表连接了,我反正是没耐心看,哪天看我了在做补充。

    展开全文
  • 数据库多表查询关联查询SQL语句

    千次阅读 2019-09-11 20:15:09
    LEFTJOIN ON关键字会从左那里返回所有的行,即使在右中没有匹配的行。意思就是向左关联某个记录,以左边的那个的记录为基准,通过关联条件,将关联的相关符合要求的记录一起找出来,找出来的记录条数就是...

    LEFT JOIN  ON 关键字会从左表那里返回所有的行,即使在右表中没有匹配的行。意思就是向左关联某个表记录,以左边的那个表的记录为基准,通过关联条件,将关联表的相关符合要求的记录一起找出来,找出来的记录条数就是左边表的记录数

    具体用法如下:

    SELECT  column_name(s)  FROM table_name1 LEFT JOIN table_name2 ON table_name1.name = table_name2.name

    SELECT  column_name(s)  FROM table_name1 LEFT JOIN table_name2 ON table_name1.name = table_name2.name

    也可以三级联动查询 :如下数据表

    查询语句:

    select 
    
    u.user_id, u.user_name,u.user_sex,c.college_name,s.subject_name, s.achievement
    
    from user u
                     LEFT JOIN  subject s ON   s.user_number=u. user_id
    
                     LEFT JOIN  college c ON c.subject_number=s.subject_id;
    


    参考博客:https://blog.csdn.net/djr2ss666666/article/details/79808235

    展开全文
  • select username,default_tablespace from user_users;
  • 数据库基础(常用SQL语句

    万次阅读 多人点赞 2019-10-07 13:49:59
    一、数据库级及SQL语言简介 1、目前主流数据库 微软:sql server、access 瑞典:mysql ibm: db2 sybase:sybase ibm: informix oracle: oracle 2、SQL语言 DQL-------------数据查询语言 select … From … Where DML...

    一、数据库级及SQL语言简介

    1、目前主流数据库
    微软:sql server、access
    瑞典:mysql
    ibm: db2
    sybase:sybase
    ibm: informix
    oracle: oracle

    2、SQL语言
    DQL-------------数据查询语言
    select … From … Where
    DML-------------数据操纵语言
    insert、update、delete
    DDL-------------数据定义语言
    create、alter、drop
    DCL-------------数据控制语言
    commit、rollback、savepoint

    二、数据库的数据类型(MySQL)

    1、字符类型:

    • char类型:固定长度的内容,效率高。存储空间范围(1-2000)字节。
    • varchar类型:动态长度的字符类型,存储空间范围(1-4000)字节。
    • long类型:存储2G的文件大小。

    2、数值数字类型:
    在这里插入图片描述

    3、日期类型:
    在这里插入图片描述

    三、基本Sql语句

    1、表设计
    • 创建表:

       create table 表名 (字段 字段类型);
      
    • 复制表结构及数据:

       create table 新表 as select * from 旧表
      
    • 复制表结构不需要数据:

       create table 新表 as select * from 旧表 where 2<>2
      
    • 查看表结构:desc 表名.

    • 复制表数据:

       insert into 目标表 select * from 参考表
      
    • 伪表:系统中保留的虚拟表,不能更改,也不能删除。

       名称:dual
       通过伪表显示当前系统时间:select sysdate from dual;
      
    • 查看指定用户下所有的表

       SELECT table_name FROM all_tables WHERE owner = upper('用户名');
       注意:用户名必须大写
      
    2、操作字段
    • 增加字段:

       alter table 表名 add (字段名称 字段类型)
      
    • 修改字段:

       alter table 表名 modify (字段名称 字段类型)
       注意:实际上大部分时间我们修改的是字段类型的大小,而不是类型本身,如果非在改成其它类型,则需要满足兼容性。或者把对应这列数据全部清除。
      
    • 删除字段:

       alter table 表名 drop column 字段名称
      
    3、表约束
    • 约束说明

      NOT NULL 指定字段不能包含空值
      UNIQUE 指定字段的值(或字段组合的值)表中所有的行必须唯一
      PRIMARY KEY 表的每行的唯一标识,即主键
      FOREIGN KEY 在字段和引用表的一个字段之间建立并且强制外键关系,即外键
      CHECK 指定一个必须为真的条件

    • 主键与唯一约束的区别:

      1.主键只能有一个,而唯一约束可以有多个;
      2.主键可以由一列或多列充当,但唯一约束只能一列一列创建;
      3.主键不允许为空,而唯一约束在Oracle中可以多次为空,在SQL中唯一约束只能一次为空;

      NOT NULL:此约束为行级约束,不在能表级约束中定义。

    • 添加约束:

       ALTER TABLE 表名 ADD  [CONSTRAINT 约束标识名称]  约束类型(字段名称);
       例:ALTER TABLE stu ADD CONSTRAINT stuid_pk  PRIMARY KEY(stuid);
      
    • 删除约束:

       ALTER TABLE table
       DROP  PRIMARY KEY | UNIQUE(字段名) | CONSTRAINT 约束名 [CASCADE]
       例:ALTER TABLE stu DROP PRIMARY KEY;
      

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

    示例一:【创建表的同时指定约束】
    create table 表(
    字段 字段类型 CONSTRAINT 约束标识名称 约束类型;
    );
    示例二:【先创建表,后创建约束】
    ALTER TABLE 表名 ADD CONSTRAINT 约束标识名称 约束类型(字段);
    外键约束的创建:
    alter table table_name add constraint cid_fk foreign key(cid) references classes(cid) 【on delete cascade】

    (主-从)建表规则:
    1.先create父表(要有pk或uk),再create子表(FK)
    2.先insert父表,然后insert子表。
    3.先delete子表,在delete父表。
    4.先drop子表,在drop父表。
    父表先于子表存在,子表比父表先消亡。
    --------------------------------------------------------------

    4、表查询
    • 基本查询

       语法格式:
       select [列名],... from 表名
      
    • 条件查询(where)

       语法格式:
       select [列名],... from 表名  where 条件
      
    • 逻辑运算

       操作符包括如下几种:
       	1、算术操作符:算术操作符包括加(+)、减(-)、乘(*)、除(/)
       	2、比较操作符:比较操作符包括 =、!=、<、>、<=、>=、BETWEEN…AND、IN、LIKE 和 IS NULL等
       	3、逻辑操作符:逻辑操作符包括与(AND)、或(OR)和非(NOT)。 
       	4、集合操作符:集合操作符包括冻并集(UNION)、交集(INTERSECT)、剪集(MINUS)
       	5、连接操作符:||   例:SELECT ename || ' is a ' || job FROM emp;
       	集合操作符:多用于数据量比较大的数据局库,运行速度快。
       	1). union
       		该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中重复行。
       		SELECT ename, sal, job FROM emp WHERE sal >3000
       		UNION
       		SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
       		
       	2).union all
       		该操作符与union 相似,但是它不会取消重复行,而且不会排序。
       		SELECT ename, sal, job FROM emp WHERE sal >2500
       		UNION ALL
       		SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
       		
       	3). intersect
       		使用该操作符用于取得两个结果集的交集。
       		SELECT ename, sal, job FROM emp WHERE sal >2500
       		INTERSECT
       		SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
       		
       	4). minus
       		使用改操作符用于取得两个结果集的差集,他只会显示存在第一个集合中,而不
       		存在第二个集合中的数据。
       		SELECT ename, sal, job FROM emp WHERE sal >2500
       		MINUS
       		SELECT ename, sal, job FROM emp WHERE job = 'MANAGER';
       		(MINUS 就是减法的意思)
       		
       注意: 集合运算中各个集合必须有相同的列数,且类型一致,集合运算的结
       	   果将采用第一个集合的表头作为最终的表头,order by
       	   必须放在每个集合后
      
    • 排序

       语法格式:
       select [列名],... from 表名  where 条件 order by 字段 (desc | asc)
       说明:
       DESC:表示按降序排序(即:从大到小排序)
       ACS:表示按升序排序(即:从小到大排序)
      
    • 函数

       1、常用的系统函数
           1.1 日期函数:
       		-ADD_MONTHS(d,f):指定时间d,推移f月,得到推移后的时间
       			d:指定一个时间(需要使用to_date函数转换)
       			f:在指定时间上推移多少个月
       			例:在“2010-05-12”时间上推移3个月后的时间
       			select ADD_MONTHS(to_date('2012-05-12','yyyy-mm-dd'),3) from dual;
       			
       		-Months_between(d1,d2):显示两个时间相差的月份
       			d1:第一个时间
       			d2:第二个时间
       			
       			注意:必须注意的是,d1与d2都为Date类型,不然会出现错误。
       			 须用to_date('','') 	来转换为日期格式,才能参加计算。
       			
       			例:计算 2012-12-12 与 2012-2-12 相差的月份。
       			SELECT MONTHS_BETWEEN(to_date('2012-12-12','yyyy-MM-dd'),to_date('2012-2-12','yyyy-MM-dd'))
       			FROM dual;
       			
       			
       		-last_day(m):返回特定日期所在月份的最后一天
       			m:时间
       			
       			例:计算“2010-10-12”所在月份的最后一天
       			SELECT last_day(to_date('2010-10-12','yyyy-mm-dd')) FROM dual;
       		
       		-next_day(x,y)用于计算x时间后第一个星期y的时间。
       			例子,当前时间是2014-08-15 
       			select next_day(to_date('2014-08-15','yyyy-mm-dd'),'星期二')from dual;
       			返回的结果是: 2014-08-19
       		
       		-trunc(date,[fmt]):处理时间
       			date:一个日期值
       			fmt :日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去
       			
       			例:
       				trunc(sysdate,'yyyy') --返回当年第一天.
       				trunc(sysdate,'mm') --返回当月第一天.
       				trunc(sysdate,'d') --返回当前星期的第一天.
       				trunc(sysdate,'dd')--返回当前年月日
       				trunc(sysdate, 'hh')--返回当前小时
       				trunc(sysdate, 'mi')--返回当前分钟
       		
       		-trunc(number,[decimals]):处理数字
       			number:	 待做截取处理的数值
       			decimals:指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分
       			例:
       				TRUNC(89.985,2)=89.98
       				TRUNC(89.985)=89
       				TRUNC(89.985,-1)=80
      
      
       2、常用的字符函数:
       		-lower(string):转小写
       			用法:比如将字符“ABC”转为小写 
       			select lower('ABC') from dual;
       			结果:abc
       			
       		-upper:转大写
       			用法:比如将字符“abc”转为大写 
       			select upper('abc') from dual;
       			结果:ABC
       			
       		-length():长度函数
       			用法:获取字符“abc”的长度
       			select  length('abc') from dual;
       			结果:3
       			注:长度是指字符串的长度 如“中国”为2 “ab”也为2
      
       		-substr(char,m,n):截取字符串
       			用法:将字符“abcde”中的“cd”进行截取
       			select substr('abcde', 3 ,2 ) from dual;
       			结果:cd
       			
       		-replace(s1,s2):替换
       			用法:将字符“abcde”中的“c”替换为“123”;
       			select replace('abcde', 'c' ,'123' ) from dual;
       			结果:ab123de
       			
       		-concat(s1,s2):拼接
       			用法:将字符“abc”与字符“de”拼接显示
       			select concat('abc','de') from dual; 
       			结果:abcde
       			等价于: 'abc'||'de'
      
       		lpad( string, padded_length, [ pad_string ] ):指定长度,不够则填充
       			用法:将字符“abcde”以10个长度显示,左侧用“X”填充
       			select lpad('abcde',10,'x') from dual;
       			结果:xxxxxabcde
      
       3、数字函数:
       		ceil:往上取整,与小数位的大小无关
       		floor:往下取整,与小数位的大小无关.
       		mod:取余。求模。
       		round:四舍五入。
       		trunc(m,n):
       		
       4、 转换函数:
       		-to_char:日期转化为字符串  
       		例:
       		select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;    
       		select to_char(sysdate,'yyyy') as nowYear   from dual;   //获取时间的年   
       		select to_char(sysdate,'mm')    as nowMonth from dual;   //获取时间的月   
       		select to_char(sysdate,'dd')    as nowDay    from dual;   //获取时间的日   
       		select to_char(sysdate,'hh24') as nowHour   from dual;   //获取时间的时   
       		select to_char(sysdate,'mi')    as nowMinute from dual;   //获取时间的分   
       		select to_char(sysdate,'ss')    as nowSecond from dual;   //获取时间的秒
       		select to_char(sysdate,'day')    as nowSecond from dual;   //获取时间的星期
       		
       		
       		-to_date:把字符串类型日期转换为date类型日期。
       		例:
       		select to_date('2014-02-11','yyyy-mm-dd') from dual
       		
       		sysdata当前日期
      
       		-to_number:把某种类型转换为数字类型。
       		注意:如果字符类型的内容是数据,则可以实现自动转换为数字类型
       	
       5、 其它函数:
       			-NUL函数:把数字类型为null的值转换为0;
       				结构:
       					nvl(字段名称,0);
       					nvl(comm,0);
       				转换之后,可以实现算术运算。
       				
       			-decode函数:
       				decode(参数一,参数二,参数三,....);
       				参数一:字段名称
       				参数二:参数一字段对应的内容。
       				参数三:把参数一字段对应的内容替换成其它的内容。
       				示例:select decode(JOB,'CLERK','业务员') from emp;
       				
       6、聚合函数:MAX、MIN、SUM、AVG、COUNT
       	-AVG :返回指定组中的平均值。
       	-COUNT:返回指定组中项目的数量。 
       	-MAX:返回指定数据的最大值。
       	-MIN:返回指定数据的最小值。
       	-SUM:返回指定数据的和,只能用于数字列。
      

    看完了以上的数据库基础,你是否有一种想要了解多表查询的冲动呢,请看下一篇

    展开全文
  • SELECT l.limitId, l.limitName, l.limitURL, m.ModelName,o.OperateName FROM limits l LEFT JOIN model m ON m.ModelId=l.limitModelId LEFT JOIN operate o ON o.OperateId=l.... 用户...

    SELECT 
    		l.limitId, l.limitName, l.limitURL, m.ModelName,o.OperateName
    		FROM limits l 
    		LEFT JOIN model m ON m.ModelId=l.limitModelId
    		LEFT JOIN operate o ON o.OperateId=l.limitOperateNameId;
    	

    用户表user:

    user_iduser_nameuser_sex
    100111佳佳

    课程表subject:

    subject_idsubject_nameachievementuser_number
    111计算机科学与技术99100111

    学院表college:

    college_idcollege_namesubject_number
    201网络工程学院111

    select

    u.user_id, u.user_name,u.user_sex,c.college_name,s.subject_name, s.achievement

    from user u

                     LEFT JOIN  subject s ON   s.user_number=u. user_id

                     LEFT JOIN  college c ON c.subject_number=s.subject_id;

    三表关联查询结果:

    user_id(学号)user_name(姓名)user_sex(性别)college_name(学院)subject_name(学科)achievement(成绩)
    100111佳佳网络工程学院计算机科学与技术99

    展开全文
  • 在navicat Premium 15中查看数据库表的创建sql语句 发现在navicat Premium中右键表名,对象信息没有反应 需要注意右上角的小图标ddl(仔细看) 选择数据,点击ddl即可查看
  • python连接sqlserver,查询数据
  • Oracle数据库多表关联查询SQL语句

    千次阅读 2018-10-16 11:41:02
    转至 数据库(学习整理)----7--Oracle多表查询,三种join连接 ======================= 聚合函数:(都会忽略null数据) 常用的有5种:将字段中所有的数据聚合在一条中 1、sum(字段名) :求总和 2、avg...
  • 数据库SQL系列】sql语句执行顺序,你理解了吗

    万次阅读 多人点赞 2020-01-13 15:29:00
    记得前几年,还是初级的时候,面试官问到,请你讲一下sql语句的执行顺序。当时我以为就是按照sql的关键字排列顺序来执行的。当时说完,面试官心里估计已经直接pass我了吧。今天复习的时候,突然想起这个基础知识点,...
  • 设计库 ... 然后点击创建新   双击该可以添加属性格式 ... ...建立完成之后,可以生成sql文件,先点击左上角的三条线,然后点击工具,选择导出sql文件,会有一个弹窗出现 ...选择路径和即可生成sql...
  • 为什么模糊查询sql语句中有select * from 表名 where 1=1?,这是什么意思
  • ##java 连接sqlserver数据库,并执行sql语句 package test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; ...
  • 数据库添加字段的sql语句

    万次阅读 2018-11-08 11:09:37
    在我们平时开发的时候,很容易遇到这种情况,就是在开发的时候,有的需求可能会拓展我们数据库中的,比如添加字段什么的,下面就是添加字段的sql语句: 添加一个字段: alter table 表名add 字段名 varchar(32) ...
  • 查询某个用户能访问sqlserver上那些数据库sql语句? 或者某个sqlserver上的数据库能被那些用户访问的sql语句
  • 数据库连接查询sql语句

    千次阅读 2019-05-06 08:23:07
    总共有三个 1、stitle是测试的题目 2、card是一个题目下面的...sql语句如下 select * from (stitle s LEFT JOIN card c ON c.tid=s.tid) LEFT JOIN `option` o ON o.mid=c.mid where title='测试你成功的...
  • 各种数据库分页查询sql语句

    千次阅读 2016-12-19 22:49:56
    1.oracle数据库分页 select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>=startrow; 2.DB2数据库分页 Select * from (select rownumber() over() as rc,a.* from ...
  • Mysql最快清空数据库表SQL语句

    千次阅读 2014-08-28 18:10:05
    这样就利用SQL语句清空了该数据,而不保留日志。  TRUNCATE TABLE 虽然与不带 WHERE 的 DELETE 语句相同  但 TRUNCATE TABLE 速度更快而且占资源少速度快  TRUNCATE TABLE 不记录日志所以不能激活...
  • 删除数据库表数据SQL语句

    千次阅读 2019-01-11 14:50:21
    truncate table tbFolder
  • 查询数据库表修改记录的sql语句

    万次阅读 2018-12-03 16:21:41
    SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名称' ORDER BY create_time DESC; 该语句可以查询出,数库什么时候增加了什么,和修改了那个
  • 数据库的单表查询,熟悉SQL语句

    万次阅读 2018-09-03 10:49:22
    使用SQL语句完成单的增删改查 使用JDBC通过java代码完成单的增删改查 创建数据库:create 数据库名; 删除数据库:drop database 数据库名; 查看数据库:show databases; 创建数据库并进行设置编码格式:...
  • Oracle 数据库版本和位数sql语句查看方法。 想用 navicat、PL/SQL 等工具连接 oracle,因为需要 Instant Client,而 Instant Client 的版本和位数需要跟要连接的数据库对应上才能成功连接,所以我们就要知道数据库的...
  • 最近要迁移到Mybatis-Plus上,但是我不怎么会迁移,Mybatis-Plus的用法也不清楚,有点一头雾水 ...在Service中调用了mapper定义的接口,在mapper.xml中就写了sql语句,mapper作为一个桥梁一样的东西,...
  • SQL语句是针对数据库而言的一门语言,它可以创建数据库,数据,可以针对数据库的数据进行增, 删,改,查等操作,可以创建视图,存储过程,可以赋予用户权限等。 2.SQL和T-SQL SQL的全程是“结构化查询语言...
  • sqlserver分页 第一种分页方法 需用到的参数: pageSize 每页显示多少条数据 pageNumber 页数 从客户端传来 totalRecouds 中的总记录数 select count (*) from 表名 totalPages 总页数 totalPages=...
  • 本文主要讲述了SQL查询语句表之间的行列转换,同时也包括如何将一行数据转换成两列数据的方法、子查询的应用、decode函数的用法。希望文章对你有所帮助~ 1.创建数据库表及插入数据 2.子查询统计不同性质的学生总数 3...
  • GP数据库表结构查询语句

    万次阅读 2018-11-23 17:13:04
    一、GP数据库表结构查询SQL语句 查询时替换table_schema.table_name为所要查询即可。 select attname, -- 字段名 typname,-- 类型 CASE WHEN pg_truetypmod = -1 /* default typmod */ THEN null WHEN ...
  • 数据库一张的数据拷贝到另一张SQL语句: INSERT INTO tab2(id,num) SELECT id, num, FROM tab1 WHERE id>12;
  • 数据库sql语句多表连接查询+group by分组的使用

    万次阅读 多人点赞 2018-08-01 10:47:02
    其实,在学校的一次课设中就发现了不会多表连接... 今天写sql语句的时候,需要从两个中查出关联的数据,并且需要分组 第一次写出来的代码如下 select b.ATTR_VALUE_NAME,count(a.*) from sales_main.opp_inf...
  • 数据库中简单的SQL语句以及where字句

    千次阅读 2019-08-03 15:45:53
    数据库中简单的SQL语句以及where字句 select * from dept; select * from emp; --查询表中指定字段中的值 select 字段名1,字段名2,.....from表名,其中*代表所有 select empno from emp; select empno,ename from...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,132,015
精华内容 452,806
关键字:

数据库多表查询sql语句