数据库基础(常用SQL语句)_数据库语言sql语言基础-程序员宅基地

技术标签: Java  数据库  

一、数据库级及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:返回指定数据的和,只能用于数字列。
    

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41751237/article/details/102303643

智能推荐

current_session_context_class_cp30 current_session_context_class-程序员宅基地

文章浏览阅读1.3w次。平时在单独使用hibernate的时候,习惯于配置属性thread根据文档,这个是hibernate3.1以后的一个新扩展,目的在于可以让我们在某一个上下文环境(比如说当前线程)中可以通过SessionFactory.getCurrentSession()得到同一个session会话.后来当我们把spring,hibernate整合的时候,在spri_cp30 current_session_context_class

人机交互系统(1.1) ——Annoy算法(海量数据查找)_annoy 算法 原理-程序员宅基地

文章浏览阅读1.9k次,点赞3次,收藏8次。前言一旦文档变成这种稠密向量形式,那如何从海量文本中快速查找出相似的Top N 文本呢?这就不得不提到一个海量数据相似查找算法——Annoy算法。算法原理建立索引Annoy的目标是建立一个数据结构,使得查询一个点的最近邻点的时间复杂度是次线性。Annoy 通过建立一个二叉树来使得每个点查找时间复杂度是O(log n)。 看下面这个图,随机选择两个点,以这两个节点为初始中心节点,执行聚类..._annoy 算法 原理

windows10下破解开机密码_猕猴桃mimikatz-程序员宅基地

文章浏览阅读1.2w次。剪切刚刚导出的注册表文件到猕猴桃x64目录下。mimikatz(猕猴桃破解工具)此方法破解win10下所有账户的密码。把此文件复制到猕猴桃x64文件夹下。2.破解win10所有账户密码。此步将会破解所有账户的哈希密码。打开带管理员权限的cmd窗口。NTLM是加密过的账户密码。以管理员身份运行猕猴桃。以管理员权限打开猕猴桃。(测试机只有一个账户)原理是利用注册表文件。_猕猴桃mimikatz

win10装机教程-程序员宅基地

文章浏览阅读438次。win10装机教程20200225-装机教程.docx_win10装机教程

Java本地工具化类的简单例子_java 本地化语言工具类-程序员宅基地

文章浏览阅读2.1k次。Java本地工具化类的简单例子:package com.bbwl.resource;import java.text.DateFormat;import java.text.MessageFormat;import java.text.NumberFormat;import java.util.Date;import java.util.GregorianCalendar;import jav_java 本地化语言工具类

使用MeterSphere前置脚本(BeanShell)模拟签名机制调用阿里云接口-程序员宅基地

文章浏览阅读3.4k次,点赞4次,收藏9次。一个非常偶然的机会,我们公司开始使用MeterSphere一站式开源持续测试平台作为我们的测试工具。不得不说,MeterSphere作为一个测试平台,合理有效集成了最通用的测试管理功能和最常用的测试工具,能够实现测试团队的高效协同,并且预计在未来很长一段时间也可以支撑我们更加丰富的测试工作拓展。本着好东西就要分享的态度,接下来我就来分享下我们公司是如何使用MeterSphere前置脚本模拟签名机制调用阿里云接口。一、关于接口测试目前许多系统的提供的API或者SDK一般都会带有一些签名机制,即通过acc_metersphere前置脚本

随便推点

计算机JW,被它颜值所吸引:Casio卡西欧JW-200SC计算器 入手体验-程序员宅基地

文章浏览阅读324次。被它颜值所吸引:Casio卡西欧JW-200SC计算器 入手体验2019-03-22 09:38:216点赞7收藏8评论因为工作需要,最近自己也正打算入手一款计算器,本来看上了米家的计算器,喜欢它那白色简单的外观,后来看到张大妈众测频道上新了这款卡西欧的计算器,被它的外观设计给迷上了,除了大一点点,怎么看怎么顺眼,正好赶上三八妇女节的优惠价格在天猫入手了它,这样也不用苦苦的等众测了,你说是不是。入...

cesium-鹰眼图_cesium鹰眼图-程序员宅基地

文章浏览阅读1.5k次。cesium-鹰眼图介绍鹰眼图是GIS中一个基本的功能,鹰眼图,顾名思义,在鹰眼图上可以像从空中俯视一样查看地图框中所显示的地图在整个图中的位置。实现思路在原有的地图上新增一个viewer(地图)让新增的地图和原地图联动视角禁用小地图的操作完整代码<!DOCTYPE html><html lang="en"><head> <!-- Use correct character set. --> <meta char_cesium鹰眼图

关于DataTable添加新列到指定列的方法-程序员宅基地

文章浏览阅读725次。在开发新项目的时候发现了一个问题dtResult.Columns.Add()方法只能将指定的列添加到DataTable的列的最后的位置,但是不能添加到指定的列上。举例来说,假设dtResult总共有3列(列名分别是col1,col2,col3),我们新定义一个列,列名是col100,那么dtResult.Columns.Add(col100)方法只能将列添加到第四列,这个时候新表将..._返回datatable数据,我想把列名加到 xtrareport中?

json对象转换成字符串 java_将java对象转换成json字符串-程序员宅基地

文章浏览阅读328次。package com.cjonline.foundation.util;import java.lang.reflect.Field;import java.math.BigDecimal;import java.text.SimpleDateFormat;import java.util.Collection;import java.util.Date;public class JsonUti..._fieldvalue instanceof string

mysql增加列,修改列名、列属性,删除列-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏6次。mysql修改表名,列名,列类型,添加表列,删除表列alter table test rename test1; --修改表名alter table test add column name varchar(10); --添加表列alter table test drop column name; --删除表列alter table test modify ad..._增加列的命令是? alter table 表名 rename 表名 alter table 表名 modify 列名 数

CSS从入门到精通——文本与字体样式1.0_设置 h1, h2 的font-family 为: pingfang sc, verdana, he-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏7次。1.字体颜色、类型与大小任务描述相关知识字体颜色color字体类型font-family字体系列字体栈字体大小font-size设置方式常用单位像素em百分比结合 em任务描述请在右侧的编辑框中修改style.css文件。 设置 h1, h2 的font-family 为:PingFang SC, Verdana, Helvetica Neue,Microsoft Yahei, Hiragino Sans GB, Microsoft Sans Serif,WenQuanYi Micro Hei,_设置 h1, h2 的font-family 为: pingfang sc, verdana, helvetica neue, microsof