1、首先需要创建数据库表t_user_info,利用创建表SQL语句createtable。
2、向数据库表里插入数据,按照插入SQL语句insertinto执行。
3、插入完毕后,查询数据库表记录select字段fromtable。
4、查询数据库表t_user_info用户地址为空的记录selectfromtablefrom字段isnull。
5、查询数据库表t_user_info用户电话不为空的记录,selectfromtablewhere字段isnotnull。
6、查询数据库表t_user_info电话不为空且地址为空的记录,selectfromtablewhere字段isnotnulland字段isnull。
(1) 启动 监听
lsnrctl start;
(2)进入sqlplus界面
sqlplus /nolog
SQL>conn sys/jiaxiaoai@orcl as sysdba;
(3)启动数据库实例
SQL>startup;
(4)查看当前所有的数据库
select from v$database;
或 select name from v$database;
(5)查看哪些用户拥有sysdba、sysoper权限
select from V_$PWFILE_USERS;
show user;查看当前数据库连接用户
(6)进入某个数据库:database 数据库名;
查看数据库结构:desc v$database;
(7)查看所有用户实例:
select from v$instance;
或 select instance_name from v$instance;
(8)查看当前库的所有数据表
select from all_tables;
select table_name from all_tables;
select table_name from user_tables;
select table_name from all_tables where owner='用户名';
(9)查看表结构
desc 表名;
分组查询(group by)
分组查询:
1查询每个部门的最高工资
select deptno,max(sal) from emp group by deptno;
2查询每个职位的平均工资
select deptno,avg(sal) from emp group by deptno;
3查询每个部门的人数
select deptno,count() from emp group by deptno;
4查询工资大于1000的员工,每个部门的最大工资
select deptno,max(sal) from emp where sal>1000 group by deptno;
多字段分组查询:group by 字段1,字段2;
1查询每个部门下每个主管的手下人数
select deptno, mgr, count() from emp where mgr is not null group by deptno,mgr;
2查询emp表中每个部门的编号,人数,工资总和,最后根据人数进行升序排序,如果人数一致,根据工资总和降序排序
select deptno,count(),sum(sal) from emp group by deptno order by count() asc,sum(sal) desc;
3查询工资在1000-3000之间的员工信息,每个部门的编号,平均工资,最低工资,最高工资,根据平均工资进行升序排序排列
select deptno,avg(sal),min(sal),max(sal) from emp where sal between 1000 and 3000 group by deptno order by avg(sal)
4查询含有上级领导的员工,每个职业的人数,工资的总和,平均工资,最低工资,最后根据人数进行降序排列,如果人数一致,根据平均工资进行升序排列
select job, count(),avg(sal),min(sal) from emp where mgr is not null group by job order by count() desc,avg(sal) asc;
各种关键字的顺序
select from 表名 where grouphaving order by limit
having(结合group by使用)
having一般要结合分组查询和聚合函数使用,用于给聚合函数的内容添加条件
聚合函数的条件不能写在where后面
普通字段的条件写在where后面,聚合函数的条件写在having后面
1查询每个部门的平均工资,要求平均工资大于2000(c是别名的用法)
select deptno,avg(sal) c from emp group by deptno having c >2000;
2查询每个分类的平均单价,要求平均单价低于100
select category_id ,avg(price) a from t_item group by category_id having a<100;
3查询category_id分类为238和917的两个分类的平均单价
select category_id,avg(price) from t_item where category_id in(238,917) group by category_id;
4查询emp表中每个部门的平均工资高于2000的部门编号,部门人数,平均工资,最后根据平均工资降序排列
select deptno,count(),avg(sal) a from emp group by deptno having a>2000 order by a desc;
5查询emp表中工资在1000-3000之间的员工,每个部门编号,工资总和,平均工资,过滤掉平均工资低于2000的部门,按照平均工资进行升序排序
select deptno,sum(sal), avg(sal) a from emp where sal between 1000 and 3000 group by deptno having a>=2000 order by a asc;
6查询emp表中每年入职的人数
select extract(year from hiredate) year,count() from emp group by year;
7查询每个部门的最高平均工资
select deptno,avg(sal) from emp group by deptno order by avg(sal) limit 0,1;
子查询(嵌套查询)
子查询可以写在where或having后面当做查询条件的值
写在from后面,当做一张新表(但是必须要有别名)
select ename from (select from emp where sal>1000) newtable;
写在创建表的时候
create table emp_20 as (select from emp where deptno=20);
1查询emp表中工资最高的员工信息
select from emp where sal=(select max(sal) from emp);
2查询emp表中工资大于平均工资的所有员工的信息
select from emp where sal>(select avg(sal) from emp);
3查询工资高于20号部门最大工资的员工信息
select from emp where sal>(select max(sal) from emp where deptno=20);
4查询工资高于20号部门最大工资的员工信息
select from emp where sal>(select avg(sal) from emp);
5查询和Jones相同工资的其他员工信息
select from emp where job=(select job from emp where ename='jones' and ename!='jones');
6查询工资最低的员工的同事们的信息(同事=相同job)
select from emp where job=(select job from emp where sal=(select min(sal) from emp)) and sal !=(select min(sal) from emp);
7查询最晚入职的员工信息
select from emp where hiredate=(select max(hiredate) from emp);
8查询名字为King的部门编号和部门名称(需要用到dept表)
select deptno,dname from dept where deptno=(select deptno from emp where ename='king');
9查询有员工的部门信息(编号和名称)
select deptno ,dname from dept where deptno in (select distinct deptno from emp);
10查询平均工资最高的部门信息
select from dept where deptno in (select deptno from emp group by deptno having avg(sal)=(select avg(sal) from emp group by deptno order by avg(sal) desc limit 0,1));
关联查询
同时查询多张表的数据称为关联查询
1查询每一个员工的名称和其对应的部门名称
select eename,ddname from emp e,dept d where edeptno=ddeptno;
2查询在new york工作的所有员工的信息
select e from emp e,dept d where edeptno=ddeptno and dloc='new york';
笛卡尔积
如果关联查询不写关联关系则查询到的数据是两张表的乘积,这个乘积称为笛卡尔积,笛卡尔是一种错误查询方式的结果,工作切记不要出现
等值连接和内连接
等值连接:
select from A,B where Ax=Bx and Aage=18;
内连接:
select from A join B on Ax=Bx where Aage=18;(将关联关系写在on后面)
1查询每个员工的名称和其对应的部门名称
select eename,ddname from emp e join dept d on edeptno=ddeptno;
外连接
使用外连接查询得到的数据层除了两张表的交集数据以外和另外一张主表的全部数据,哪个表为主表通过left/rigth控制, left以join左边表为主表 rigth以join右边表为主表
1查询所有员工的名称和其对应的部门名称
select eename,ddname from emp e left join dept d on edeptno=ddeptno;
这个非常简单,MySQL数据库的用户信息、数据库信息和登录IP信息通常都保存在系统数据库中,可以直接经过查询得到,下面我简单介绍一下,以MySQL55为例:
用户信息
这个主要保存在mysql数据库的user表中,通常修改用户的密码、删除用户及分配权限等就是在这个表进行,下面我简单介绍一下:
查询所有用户这个直接执行“selectuser,hostfromuser;”语句就行,如下,第一列为用户名,第二列为允许登录的IP,%表示任意IP都可登录,localhost则只允许本地登录:
查询用户权限这个直接执行“showgrantsfor'user'@'host';”命令就行,如下,以root用户为例,则直接执行“showgrantsfor'root'@'localhost';”命令,all表示所有权限,select表示只查权限,update表示只改权限,delete表示只删权限等:
数据库信息
这个主要保存在information_schema数据库中,它通常保存着MySQL数据库所维护的所有数据库信息,包括数据库名,数据表名,表栏的数据类型与访问权限等,下面我简单介绍一下:
查询所有数据库
这个直接执行“showdatabases;”命令就行,如下,会列出当前MySQL数据库中存储的所有数据库,查看某一个数据库下所有数据表的话,执行“showtables;”命令就行:
查看数据库大小
以test数据库为例,计算单位为MB,直接执行“selectconcat(round(sum(data_length)/(10241024),2)+round(sum(index_length)/(10241024),2),'MB')as'DBSize'fromtableswheretable_schema='test';”命令就行,如下:
查看数据库编码
这个直接执行“showvariableslike'character%';”命令就行,如下,character_set_client为客户端编码,character_set_connection为建立连接编码,character_set_database为数据库编码,character_set_results为结果集编码,character_set_server为数据库服务器编码;
登录IP信息
这里通常是查看连接MySQL数据库的IP信息,统计每个IP的连接数,执行“selectSUBSTRING_INDEX(host,':',1)asip,count()frominformation_schemaprocesslistgroupbyip”命令就行,如下,第一列为IP地址,第二列为该IP下的连接数:
至此,我们就完成了查询MySQL数据库的用户信息、数据库信息和登录IP信息。总的来说,整个过程非常简单,只要你有一定的MySQL基础,熟悉一下相关文档和说明,很快就能掌握的,网上也有相关教程和资料,介绍的非常详细,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言进行补充。
1、先建一个存放用户信息的数据表"dengludbf" 字段名:用户名,密码
2、建立如图表单(一个用户名文本框,一个密码文本框;一个登录按钮,一个退出按钮)
(1)在表单init事件写上如下代码:
public cn &&声明全局变量,用于计算登录次数
cn=0
(2)在“登录”按钮的Click事件中写下如下代码:
use denglu
cname=alltrim(thisformtext1value) &&收集用户名信息
ppassword=alltrim(thisformtext2value)&&收集密码信息
cn=cn+1
if cn=4
thisformrelease
messagebox('非法输入超过三次,下次再来使用!','系统提示')
endif
set exact on
go top
locate for 用户名=cnameand密码=ppassword
if eof()
messagebox('用户名或密码错误,请重新输入!','系统提示')
return
else
thisformvisible=f
messagebox('登录成功!','温馨提示)
read events
endif
(3)在“退出”按钮的Click事件中写下如下代码:
thisformrelease
quit
Qt之界面数据存储与获取(userData)
向busybox中添加自己的applet
oracle内存分析
程序中实现两个DataTable的Left Join效果(修改了,网上第二个DataTable为空,所处的异常)
CompletionService 与 ExecutorService 获取任务执行结果时的区别
CompletionService 和ExecutorService的区别和用法
Java数据库开发
Python安装jpype调用java,安装jaydebeapi通过jdbc连接数据库
7 进行的数据补全和增强(随机亮度,随机饱和度,随机翻转) Imageopen(进行的读入) 2ImageEnhanceBrightness(亮度变化) 3ImageEnhanceContrast(饱和度变化) 4enhance_imagetranspose(随机翻转) 5enhance_imagesave(进行保存)
数据挖掘 Apriori Algorithm python实现
Thinkphp50 控制器向视图view赋值
oracle 查询 函数练习
Hibernate的批量查询——原生sql查询
二十二:视图之add_url_rule和approute
SQL语句创建数据库以及一些查询练习
Elasticsearch 使用:创建、插入、查询、更新、删除
模糊查询中Like的使用
mvc4中使用部分视图局部刷新实例
oracle(8)视图和查询数据库对象方法
leetcode877
bootstrap-table表格导出
servlet模板
[leetcode-609-Find Duplicate File in System]
SpringBoot 整合Mybatis *** 作数据库
python基础教程总结12——数据库
day37 02-Hibernate二级缓存:二级缓存的散装数据
Mysql进入数据库
WPF 视图导航
图形学思考 - 聊聊透视图投射矩阵perspective projective matrix
sql日期查询
ABAP-Eclipse ADT中创建ABAP CDS视图
技术小哥用手机实现激光笔,女友直呼:太酷了!
结婚登记人数创36年新低,结婚率下降原因是?
广告合作
发信联系
oracle(8)视图和查询数据库对象方法
扫码查看
视图
学习APP开发,接单挣钱!
视图 view
视图是数据库的对象之一。 视图也叫做虚表,既虚拟表,本质是对应一条select 语句,
select语句的结果集赋予一个名字就是视图的名字。
作用:
1可以简化复杂的查询
2可以限制数据的访问,对基表的其他数据起到安全和保密的作用。
创建一个 表 create table emp(
empno number(6), name char(10), id number(4), deptno number(10), job varchar2(10) );
创建视图:create view emp_v as
;创建视图时,create对应的表叫做基表。 查询视图select from emp_v ;根据查询所的方式可分为三种视图:1简单视图:根据单表建立的,且不包含任何函数运算,表达式和分组,既单表的子集。2复杂视图:根据单表建立,包含有单行函数/表达式/分组的视图。3连接视图:基于多表建立的视图。删除视图drop view emp_v;
简单视图可以进行DML *** 作,但是复杂视图不允许DML *** 作。
修改视图:视图的结构取决于对应的子查询,所以修改视图即替换对应
的子查询。REPLACE
CREATE OR REPLACE VIEW V_EMP_J
AS
SELECT EMPNO,ENAME,SAL
FROM EMP_XIAOJIE;
SELECT FROM V_EMP_J;
对视图的不当DML *** 作会污染基表数据:
对简单视图进行DML *** 作后,视图对基表做对应的 *** 作,但是影响的数据对应视图来说
是不可见的,就是对基表数据的污染。
为了避免视图对基表产生数据的污染。我们可以对视图添加检查选项要求(检查约束)
使其对视图进行DML时 *** 作时检查视图时 *** 作后是否对 *** 作的数据可见,如果不可见
则不允许 *** 作。
简单视图可以进行DML *** 作,但是复杂视图不允许DML *** 作。
视图本身是不包含数据的,只是基表的逻辑映射,所以
对视图执行DML *** 作时,实际上 *** 作的是基表。
对视图进行DML *** 作,实际上是对基表进行DML *** 作,
如果不去约束,我们对视图不可视进行DML *** 作会对
基表的数据产生污染。
对视图进行DML *** 作基本原则:
简单视图可以进行DML *** 作,但是有以下情况除外,
基表中定义了非空列,但是简单视图对应的 SELECT
语句没有包含这个非空列,导致非空列对于视图不可视,
这时无法对视图进行 INSERT *** 作。
复杂视图不允许DML *** 作
DML *** 作不能违反基表的约束条件。
创建具有 CHECK OPTION 的约束视图。
CREATE OR REPLACE VIEW V_EMP_J
AS
SELECT EMPNO,ENAME,SAL
FROM EMP_XIAOJIE
WHERE SAL<3000
WITH CHECK OPTION; --添加约束后无法对基表进行数据污染。
SELECT FROM V_EMP_J;
创建具有 READ ONLY 约束的视图。
对简单进行DML *** 作是合法的但是不安全,如果没有在视图进行DML
*** 作的必要的话,要在建立视图时声明只读来避免这种情况,包含
基表数据不会被非法的修改。
无法对只读视图执行DML *** 作。
CREATE OR REPLACE VIEW V_EMP_J
AS
SELECT EMPNO,ENAME,SAL
FROM EMP_XIAOJIE
WHERE SAL<3000
WITH READ ONLY;--用来只读
数据字典:
数据字典是一系列的表,这些表的数据由数据库自行维护,记录清单清单信息。
1在数据字典 user_objects 中查询所有视图:
SELECT object_name FROM user_objects
where object_type='VIEW';--查找所有视图
view:视图 table:表 sequence:序列 index:索引
2在数据字典 USER_VIEWS 查询所有的指定视图:
3在数据字典 user_updatable_columns 中查询视图:
SELECT COLUMN_NAME,INSERTABLE,UPDATABLE,DELETABLE --看 *** 作权限
FROM USER_UPDATABLE_COLUMNS
WHERE TABLE_NAME='V_EMP_J';
以上就是关于sql数据库查询中,空值查询条件怎么写(sql中如果条件为空查询全部)全部的内容,包括:sql数据库查询中,空值查询条件怎么写(sql中如果条件为空查询全部)、如何在服务端用SQL语句查询数据库里的信息、数据库高级查询2等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)