当前位置:首页 > 数据库 > 关键词 > 查询 > 正文

12种单表基本查询操作及代码示例

12种单表基本查询操作及代码示例

DB : database; 存放数据的地方,数据可以是图片、声音、视频、文字、数字、时间
DBMS:   MySql  Oracle DB2  SQLServer Access   (关系数据库)
一个关系就是一张二维表。
关系有约束: 1、列不可以再分
            2、不允许出现重复的列
3、不允许有相同的行
4、可以随便改变行和列的顺序

主键Primary Key--PK:  用来唯一区分表中每一行数据。可以是一个属性
       也可以是一个属性组合。
一般每一个表都需要一个主键。
一个表中的主键是不能出现重复的。

外键:Foreign Key -- FK :
      B表中有一个字段x不是这个表的主键,但它是A表的
  主键,则字段x称为B的外键。
 
  外键的作用:  连接表、约束表  


mysql有一个默认的用户 root ,
mysql是一个用户管理很多数据库。
SQL :  select insert  update  delete
ddl  
dcl
dql
dml


使用密码进入到mysql的控制界面,默认的用户是root,root管理了很多数据库。
所以第一步是查询有哪些数据库
命令: show databases;
再选中一个数据库来使用:use 数据库名。
如果不想使用提供的数据库 再创建一个新的数据库:
create database 数据库名 default character uft-8;
选中一个数据库后,查询数据库中有哪些表:
   show tables;
如果查询某个表的结构:  desc 表名。
                       show columns from 表名.
查询表中的所有内容:
                   select * from 表名;

删除数据库:
    drop database  数据库名.

sql两个作用:连接交互、嵌入到其他高级语言中使用

SQL语句Structured Query Language: 标准的结构化查询语言
所有数据库的一个官方语言。
SQL根据功能分为: DQL(select)、DML(insert update delete)
                、DDL(create drop)、DCL(grant revoke)

查询:select    选择、投影、连接

查询的最基本的语法:  
    查询语句必须要确定  查询什么数据   从哪查询。
     select ***   from 表名;
        select sname from t_student;

1、查询列:


 select 字段1,字段2,.... from 表名
     select sname,sename from t_student;
 select sname,sname,sname,sname from t_student;
     select sname,mname from t_student,t_man;  笛卡尔积

2、查询所有列


   select * from 表名.
 

3、去掉重复的结果


     select distinct sclass,sname from t_student;    
4、使用数学表达式
     例: 查询分数表中学生的编号,即语文数学的分数和
       select sid,语文+数学  from t_score;
查询学生的姓名和他10年以后的年龄
select sname,sage+10 from t_student
emp(name salary comm  jixiao)
            select name,salary+comm+jixiao from emp;


   

5、处理空值,如果一个字段是空,则使用数学运算时,整个结果都是空


      ifnull(字段名,值)
         select sid,ifnull(语文,0)+ifnull(数学,0)  from t_score;
   sqlserver中使用的是isnull(  )    Oracle中使用的是nvl(   )
         select sname,ifnull(sage,20)+10 from t_student

6、给查询的结果取别名 as


 查询的结果还是一张虚拟的表格,表格的字段名来自于select 后面的查询内容

select sid ,  ifnull(语文,0)+ifnull(数学,0) as a  from t_score;
         例: 查询分数表中学生的学号,及 4门课程分数和,取别名为总分。
          select sid,ifnull(语文,0)+ifnull(数学,0)+ifnull(英语,0)+ifnull(体育,0) as '总 分' from t_score;
 如果别名有空格,使用引号引起来。引号可以是单引号,也可以是双引号。
优先选择单引号

String slq = "select sname as '姓 名' from t_student";

 

select "abc" from t_student;    
    select now() from t_student;

System.out.print(abc);

 

7、字符串的拼接  concat函数    可以拼接字段,也可以拼接自己的字符串


   select sid,concat(sname,ssex,sename) from t_student;

select sid,concat(sname,'的性别是',ifnull(ssex,'不详'),ifnull(sage,0)) as aaa from t_student;
 
 
String str = sc.next();
 
  String sql = "  select sid,concat(str,'ssex','sage') from t_student   ";

String name = "张三";
System.out.print("hello " + name + " ,你吃饭了吗");

8、限定结果limit (只有mysql中有)


      select **** from **** limit n  取查询结果的前n行
  select **** from **** limit m,n  取查询结果中从第m(0开始)行开始,一共取n行

select sname from t_student limit 3;
select * from t_student limit 5;
select * from t_student limit 1,6; (从第2行开始取,取6行)

学生表分页:  每一页显示5个学生,
第1页:select * from t_student limit 0,5;
第2页:select * from t_student limit 5,5;
第3页:select * from t_student limit 10,5;

int pageNow = 1;
int pageSize = 5;
int lineCount;
int pageCount =  Math.ceil(lineCount*1.0 / pageSize);

 String sql = "select * from t_student limit (pageNow-1)*pageSize,pageSize";


 

9、order by  (默认使用的是升序)


  按照字段x排序:  order  by x asc(desc降序)
   select查询的结果默认跟数据中存放的数据顺序一样。
很多时候查询的结果想安装某个字段来排序,排序使用的关键字是order by
   
select * from t_student order by sscore,sage desc;


可以按照多个字段排序
 order by x  , y;   : 按照x的升序和y的升序排列。规律:按照x排序,如果x是一样就按照y排序
 order by x , y desc; 按照x的升序和y的降序排列
 order by x desc,y asc;
  select sid,sname,sclass,sage from t_student order by sclass,sage;


 select * from t_student order by 'sid' desc;
 select * from emp order by salary+ifnull(comm,0)+jixiao;


    select * from t_student order by sage desc limit 1;

limit  在   order by的后面使用

10、对查询的结果筛选  where


   =  !=  >  <  >= <=  between and    is null  
    select **** from **** where  ** order by **** limit ****;
条件限制中非数字的值要使用引号

  例;查询表中所有女生的信息
    select * from t_student where ssex='女';
        select * from goods where price >= 3000;
   
       select * from t_student where sclass != 1;

例: 查询表中2班学生的信息,按照年龄排序,取前3个学生
            select * from t_student  where sclass=2  order by sage  limit 3;
   
select sname from t_student order by sage;
              查询表中分数在500大600之间
      select * from t_student where sscore between 500 and 600;
         查询表中年龄为空的学生
 select * from t_student where sage is null;
               
select * from t_student where sscore >800;
             
 
 
 
用户登录:  username  password          user(uid  username password money)
String x = ( select password from user where username=****);
if(x== null){

}else if(x != password){

}else{

}
 
      select * from t_student where sbir > '1999a09a09';
     
 例: 查询出比Tea年龄大的学生
       select sage from t_student where sename = 'Tea'; 18
       select  * from t_student where sage > (select sage from t_student where sename = 'Tea');
 
 

条件筛选and  or  not   in  
   
  例: 查询1班500分以上的男生信息
        select * from t_student where sclass=1 and sscore > 500 and ssex='男'
 order by sage limit 1;

select * from t_student where not sclass = 1 or sclass=3;  
 
 select * from t_student where not sscore   between 500 and 600;
 
    找出90年以后出生或者1班的学生或者学号1207以后的学生,结果按照成绩降序排列。
          select * from t_student where sbir >'1990-01-01' and sclass=1 and sid > 1207
           order by sscore desc;


   例: 查询1206、 1208 、1210、1217
    select * from t_student where sid  in (1206,1208,1210,1217);
select * from t_student where not sename  in ('Apple','Orange','Tea','Ice');

在分数信息表中找出至少有一门成绩不及格的学生的学号。
  select sid from t_score where 语文<60 or 数学<60 or 英语<60 or 体育<60;

在学生信息表中找出年龄大于等于18且是3班且学号小于等于1211的学生所有信息,
并按照成绩降序排列并取前两个人。
     select * from t_student where sage >= 18 and sclass=3 and sid <= 1211
      order  by sscore desc limit 2;

 

 


11、模糊查询


   一般查询条件的时候,如果使用的是“=” 则是值的完全判断。很多时候只知道值的一部分,则
模糊查询。关键字like
   select * from goods where name like '%java%';
   select * from t_student where sename ='ook';

 模糊查询只有两个符号  _    %
 _代表一个字符。
       例: 查询姓张,且姓名只有两个字的学生信息
  select * from t_student where sname like '张_';
  查询表中名字是3个字的学生:
  select * from t_student where sname like '___';
 
%代表0个或多个字符
       例: 查询英文名字中含有a字母的学生,a不在开始,也不在结尾
  select * from t_student where sename like '%_a_%';

例:在学生信息表中使用like找出中文名字三个字且英文名字6个字符的学生的所有信息。
             select * from t_student where sname like '___' and sename like '______';
        例:英文名中含有a 和e
    sename like '%a%e%' or sename like '%e%a%'

select * from t_student where sscore like '5__';
select * from t_student where sphone like '%888%';
   select * from t_student where  sname like '张%';

12、正则表达式查询:regexp


   sql中的正则表达式判断的是字串
       select * from t_student where sphone regexp  '^.*8{4}.*$';
select * from t_student where sename regexp  '[^a-zA-Z]';

select * from t_student where sename regexp  '[[:alnum:]]';
select * from t_student where sename regexp  '[0-9a-zA-Z]';
select * from t_student where sename regexp  '[[:punct:]]';

select * from t_student where sphone regexp  '[^6]6{3}[^6]';

select * from t_student where sphone regexp  '6{3}.*8{3}' or sphone regexp '8{3}.*6{3}'

select * from t_student where sename regexp  '[\u4e00-\u9fa5]{3}';匹配所有中文

本文属原创,转载请注明原文:https://www.zhimatong.com/jiaocheng/664.html

为保证教程的实用性及扩大知识面覆盖,如果您有相似问题而未解决,可联系在线客服免费技术支持。

内容有用

联系
顾问

在线
客服
账号登录

没有账号?立即注册

忘记密码

登录即同意用户协议没有账号? 立即注册
账号注册
我已阅读并同意用户协议
立即注册
注册即同意用户协议已有账号? 立即登录
找回密码

操作步骤:邮箱验证->设置新密码

注册即同意用户协议已有账号? 立即登录