• 1.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}';匹配所有中文


  • 相关阅读:
    [iOS] 在Storyboard中使用GHSidebarNav侧开菜单控件
    [iOS] UIScrollView与软键盘配合心得——点击空白处隐藏软键盘(完美方案,不增代码)
    MySQL 表解锁
    centos7 两种定时任务
    代码统计工具git_stats部署
    Linux inode索引节点使用率100%解决
    IKVM 0.42.0.3 .NET平台上的Java实现
    Centos7最小化安装后(minimal)安装图形界面
    服务器linux发行版排名
    word为什么总是出现未响应
  • 原文地址:https://www.cnblogs.com/makalochen/p/10656231.html
Copyright © 2020-2023  润新知